Back to Blog

How to Make a Discord Bot Send a Message (Say Command, Webhooks & Scheduled Posts)

Peak Team·June 18, 2026·8 min read
By the PeakBot Team — powering 500+ Discord communities
Key Takeaways
  • Before you start, it helps to know which of these you actually want, because the setup is different for each:
  • This is the most common request, and the fastest.
  • If you don't already have one, add a bot that includes a say or announce command.
  • The bot can only post where its role is allowed to.
  • Type the say command (for example /say), choose the destination channel, and enter your text.
  • A /say command always posts under the bot's identity.

How to Make a Discord Bot Send a Message (Say Command, Webhooks & Scheduled Posts)

To make a Discord bot say a message, give it permission to post in the target channel, then either run a /say command (the bot repeats your text), send the message through a webhook (to set a custom name and avatar), or schedule it to post automatically later. Each method fits a different need, and none of them require you to write code.

"Send a message" sounds like one thing, but Discord server owners actually mean several different jobs depending on the situation. Below, each method is laid out clearly so you can pick the one that matches what you're trying to do, post it in the right channel with the right permissions, and fix the errors that trip people up.

What "make a bot send a message" can mean

Before you start, it helps to know which of these you actually want, because the setup is different for each:

  • A bot repeating your text on command — you type something, the bot posts it as itself. This is the classic /say use case for announcements that should look official.
  • A message with a custom name and avatar — you want the message to come from "Server News" with a custom logo, not from the bot's normal identity. That's a webhook job.
  • A formatted, branded message — a title, colored sidebar, fields, and an image. That's a Discord embed, and you can build one without code.
  • A message that posts on its own later — a daily reminder, a weekly recap, or an announcement timed for a launch. That's a scheduled message.

You can mix these too. A scheduled message can be an embed. A webhook can carry an embed. Start with the goal, then pick the method.

Method 1: A /say command that posts as the bot

This is the most common request, and the fastest. With a bot like PeakBot, the say feature is already built in, so there's nothing to program.

Step 1: Invite a bot with a say feature

If you don't already have one, add a bot that includes a say or announce command. PeakBot ships with custom commands and announcement tools as part of its free feature set, so you don't need a separate utility bot just to repeat text.

Step 2: Give the bot Send Messages permission

The bot can only post where its role is allowed to. In Server Settings → Roles, find the bot's role and confirm Send Messages is on, plus Embed Links if you'll use embeds. Also check the specific channel's permission overrides — a channel can deny a permission even when the role grants it server-wide.

Step 3: Run the command and pick the channel

Type the say command (for example /say), choose the destination channel, and enter your text. The bot posts it immediately as itself. Because it posts as the bot, the message looks official and members can't tell who triggered it, which is exactly what you want for rules, announcements, and pinned notices.

If you want this to behave like a true reusable command, see how Discord slash commands work so you understand the channel picker, the parameters, and who's allowed to run it.

When to use it: quick one-off announcements and official-looking notices where the bot's own name and avatar are fine.

Method 2: Webhooks for a custom name and avatar

A /say command always posts under the bot's identity. A webhook lets the message arrive under any name and avatar you choose — "Server News," "Mod Team," your brand logo — without giving anything a real account. Webhooks are a native Discord feature, so they're reliable and fast.

Step 1: Create the webhook on the channel

Open Edit Channel → Integrations → Webhooks → New Webhook. Set the name and avatar you want messages to appear under, then copy the webhook URL. Treat that URL like a password: anyone who has it can post to that channel.

Step 2: Send a message to the URL

A webhook URL accepts a simple request with your message content. You can fire one from a no-code automation tool, a form service, or any tool that can send a web request. The message appears in the channel under the name and avatar you set, looking like it came from a dedicated account.

For the full walkthrough including avatars, multiple webhooks per channel, and connecting external services, follow the Discord webhook setup guide.

When to use it: branded notifications, messages from an external app (a CRM, a status page, a Google Form), or any post that shouldn't look like it came from your bot. The trade-off is that a raw webhook has no logic of its own — it posts exactly what you send it, nothing more.

Method 3: Rich embeds without code

Plain text is fine for a quick line. For rules, announcements, or anything you want to look designed, an embed is the answer: a titled block with a colored left border, sections, an image, and a footer. Embeds are far easier to read than a wall of text, and they make a server look maintained.

The good news is you don't need code. With PeakBot you fill in fields — title, description, color, image, button-style fields — and the bot builds the embed and posts it. You can save embeds and reuse them for recurring messages.

Step 1: Open the embed builder

In your bot's dashboard, find the embed or announcement builder. Choose the channel, then fill in the parts you want. You can leave fields blank — an embed with just a title and description still looks clean.

Step 2: Set color, image, and fields

Pick a sidebar color that matches your server, add a thumbnail or large image if you have one, and use fields for short labeled sections (like "Date" and "Where"). Keep it tight — two or three fields read better than ten.

Step 3: Preview and send

Preview before posting so spacing and links look right, then send. For a complete field-by-field reference and design tips, read how to build a Discord embed.

When to use it: rules channels, event announcements, welcome messages, and any post you want to look intentional rather than thrown together.

Method 4: Scheduling messages for later

Sometimes the point is that the message posts without you. A daily check-in, a weekly recap, a reminder to verify, or an announcement timed to a launch — these should fire on their own. That's scheduling.

Step 1: Write the message you want to repeat

Decide the content first. It can be plain text or an embed. If it's recurring, keep it evergreen so it still makes sense the tenth time it posts.

Step 2: Set the channel and the time

In the bot's scheduler, choose the channel, then set when it posts — a one-time date and time, or a repeating schedule (every day at 9am, every Monday, the first of the month). Double-check the timezone so a "9am" post doesn't land at 4am for your members.

Step 3: Let it run and check the first post

Save it, then verify the first scheduled post actually landed in the right channel. After that it runs on its own. For recurring announcements specifically — recaps, reminders, rotating tips — see the dedicated guide on how to schedule recurring Discord announcements.

When to use it: anything that should be automatic and consistent. Scheduled posts are what make a server feel active even when no human is online.

Posting to the right channel with the right permissions

Most "the bot won't send a message" problems are permission problems, not bugs. Discord layers permissions, and the most specific layer wins. Here's the order to check:

  1. The bot's role — In Server Settings → Roles, the bot's role needs Send Messages, plus Embed Links for embeds and Attach Files for images. If the role can't do it anywhere, it can't do it in the channel.
  2. Channel permission overrides — Open the channel's settings and check Permissions. A channel can explicitly deny Send Messages for the bot's role even when the role allows it server-wide. A red ✗ here beats a green ✓ on the role.
  3. Announcement and forum channels — These behave differently. In an announcement channel, only certain roles can post. Forum channels need posts inside threads, not in the channel root.
  4. Slowmode and verification gates — Aggressive slowmode or a verification level that requires a verified phone number can silently block a bot from posting.

A quick way to test: have the bot post to a normal text channel first. If that works but a specific channel fails, the problem is that channel's overrides, not the bot.

If you're managing several bots just to cover say, embeds, and scheduling, that's worth rethinking. PeakBot is built to replace MEE6, Carl-bot, Dyno, and TidyCord with one bot, so messaging, moderation, leveling, and welcome posts all live in one dashboard with one set of permissions to manage. It's free for 30+ features with no time limit, and it's powering 500+ Discord communities. Plain credit where it's due: MEE6 has a long-standing custom-command system, Carl-bot's reaction-role and embed tooling is genuinely strong, and Dyno is dependable for straightforward moderation. PeakBot's case is being the best all-in-one — fewer bots, one place to manage them.

Common errors and how to fix them

The bot says nothing and shows no error. Almost always a permission override on that specific channel. Re-check the channel's permissions for the bot's role, looking for a red ✗ on Send Messages.

"Missing Permissions" or the command fails. The bot's role lacks Send Messages or Embed Links. Fix it in Server Settings → Roles, and make sure the bot's role sits high enough that it isn't overridden by a channel rule.

The embed posts as plain text. The bot has Send Messages but not Embed Links. Turn that on for the role.

The webhook stopped working. A deleted webhook, or a regenerated/leaked URL. Create a new webhook and update wherever you stored the URL. If it was leaked, delete the old one immediately.

The scheduled message posts at the wrong time. A timezone mismatch. Set the scheduler's timezone to match your community's, not the server's host region.

Images or files won't attach. The role is missing Attach Files (for uploads) or Embed Links (for image links inside embeds).

Frequently asked questions

How do I make a Discord bot say a message without any code?

Use a bot that already has a say or announcement feature, like PeakBot. Give the bot's role Send Messages permission, run the say command, pick a channel, and type your text — the bot posts it as itself. No programming required.

What's the difference between a /say command and a webhook?

A /say command posts under the bot's own name and avatar and can include logic. A webhook posts under any custom name and avatar you choose, but it only repeats exactly what you send it — it has no logic of its own. Use /say for official bot announcements, and a webhook when the message should look like it came from a separate, branded account.

Why won't my bot send messages in a specific channel?

It's almost always a channel-level permission override. Even if the bot's role allows Send Messages server-wide, a channel can explicitly deny it. Open that channel's permission settings, find the bot's role, and remove the deny. Announcement and forum channels also have their own posting rules to check.

Can a Discord bot post a message automatically on a schedule?

Yes. A bot with a scheduler lets you set a channel and a time — one-time or recurring (daily, weekly, monthly) — and it posts on its own. Confirm the timezone so the message lands when you expect, then verify the first post went to the right channel.

Is sending automated messages against Discord's rules?

Scheduled posts, announcements, and webhook notifications are all standard, allowed uses. What's against the rules is spam — mass unsolicited DMs or flooding channels. Keep automated posts relevant and reasonably paced and you're fine. You can compare full feature sets on the PeakBot pricing page or browse the blog for more setup guides.

Try PeakBot free on your server

Setup takes 30 seconds.

Free forever · Setup in 30 seconds

Ready to level up your server?

30+ features included free. Moderation, welcome messages, XP & leveling, tickets, reaction roles, and more.

See All Features