
You want your Discord server to vote on something: the next event night, a rule change, which modpack to run. Discord has a built-in poll, and there are bots that run polls too. Which one you need depends on a handful of hard limits in Discord's own poll feature, and on what you want to do with the votes afterwards.
Quick answer: Discord's native polls take a question and up to 10 answers, run for 1 hour to 1 week, can allow multiple answers, and cannot be anonymous or edited after posting. Members need the Create Polls permission to start one. For anonymous votes, more than 10 options, date and time availability, or voting limited to certain roles, add a bot for polls such as Sesh, or build your own poll integration with Discord's poll API, which lets a bot keep a poll open for up to 32 days.
How to Create a Native Discord Poll
According to Discord's Polls FAQ:
- Click the + in the message field of a text channel, a voice channel's text chat or a group message.
- Choose Poll.
- Fill in the question and the answers. Each answer can have an emoji or a custom emoji.
- Pick a duration: 1 hour, 4 hours, 8 hours, 24 hours, 3 days or 1 week.
- Turn on multiple answers if people may pick more than one.
- Select Post.
On mobile it is the same + button, then Poll and Post. Discord recommends app version 221 or higher. Polls also work in announcement channels and direct messages.
To vote, select one or more answers and click Vote; a check mark shows your choice. While the poll is open you can click Remove Vote and vote again. Poll text, question and answers included, goes through your server's AutoMod filters.
Native Poll Limits
Discord's support page covers the app side; its poll API documentation gives the exact limits of the poll object that every poll uses.
| What | Limit |
|---|---|
| Answers | Up to 10 |
| Question length | 300 characters, text only |
| Answer length | 55 characters, plus an optional emoji |
| Duration in the app | 1 hour, 4 hours, 8 hours, 24 hours, 3 days or 1 week |
| Duration through the API | Any whole number of hours up to 768 (32 days), default 24 |
| Multiple answers | Optional, off by default |
| Anonymous voting | Not available |
| Editing after posting | Not possible; delete the message and post a new poll |
| Ending early | The poll creator can end it at any time |
| Slash command | None; native polls cannot be created with /poll |
| Archive | No archive function; you can pin the poll |
| Votes by apps | Apps are not allowed to vote |
Deleting a poll means deleting the whole message, and Discord says a deleted poll cannot be restored. When a poll ends, Discord counts the votes once more and then posts an automatic poll result message in the channel.
Who Can Create Polls: the Create Polls Permission
Starting a poll is a separate permission called Create Polls. If a member opens the + menu and sees no Poll option, their role does not have it in that channel. Server owners and admins set it in two places:
- For a role: Server Settings, then Roles, pick the role (or Default Permissions), scroll to Create Polls, switch it on and save.
- For one channel: the channel's cogwheel, then Permissions, pick the role, scroll to Create Polls, set the check mark and save.
A check mark means allowed, an x means denied. One setup that works: Create Polls off for @everyone and on for staff, plus a single #votes channel where members may run their own polls. In the API the same permission is called SEND_POLLS (bit 1 << 49) and applies to text, voice and stage channels.
When Native Polls Are Not Enough
Most quick questions fit in a native poll. Look at a poll bot when you need one of these:
- Anonymous voting. Native polls have no anonymous option, and Discord's API returns the list of users behind every answer.
- More than 10 options, or answers longer than 55 characters.
- Date and time availability, such as "which evenings can you play". You can list a few dates as answers and allow multiple answers, but 10 answers of 55 characters runs out fast.
- Role-restricted voting, where only members or a team may vote.
- A poll that stays open longer than a week, which only a bot can create.
- Exported results, for example a list of voters in a spreadsheet.
Discord Bots for Polls
Two bots with documented poll commands, checked on 3 November 2026:
| Bot | Command | Options | What it adds |
|---|---|---|---|
| YAGPDB | /poll | Topic plus 2 to 10 options | A simple reaction poll, for example /poll "favorite color?" blue red pink |
| Sesh | /poll | Up to 15 options of up to 230 characters | An anonymous setting, members adding their own options, time-based options, an end time, availability polls |
A few details from Sesh's manual matter before you choose it. The anonymous setting hides voter names from everyone and cannot be changed after the poll is created. Time-based options and a poll end time are set in Sesh's web interface, not through /poll. Limiting voting to certain roles is a Premium feature. For finding a time that suits a group, Sesh also has availability polls where members vote through Discord or the web.
If someone in your server types /poll and gets a poll, that command comes from a bot like these. Discord itself has no poll slash command.
Building Your Own Poll Integration with Discord's API
For bot makers, a native poll is a poll field on a normal message. You send it with Create Message (POST /channels/{channel.id}/messages) and Discord stores and counts the votes, so the count keeps going while your bot is offline.
The poll object
The create request takes these fields:
| Field | Type | Notes |
|---|---|---|
question | poll media | Only text is supported, up to 300 characters |
answers | list of answers | Up to 10, each with poll_media holding text (up to 55 characters) and an optional emoji |
duration | integer | Hours the poll stays open, up to 768, default 24 |
allow_multiselect | boolean | Default false |
layout_type | integer | Only 1 (DEFAULT) exists |
A raw request body looks like this:
{
"poll": {
"question": { "text": "Which night for the raid?" },
"answers": [
{ "poll_media": { "text": "Friday" } },
{ "poll_media": { "text": "Saturday" } },
{ "poll_media": { "text": "Sunday" } }
],
"duration": 48,
"allow_multiselect": true
}
}
The bot needs Create Polls (SEND_POLLS) in that channel, next to the usual permission to send messages.
Sending a poll with discord.js
const channel = await client.channels.fetch('CHANNEL_ID');
await channel.send({
poll: {
question: { text: 'Which night for the raid?' },
answers: [{ text: 'Friday' }, { text: 'Saturday' }, { text: 'Sunday' }],
duration: 48,
allowMultiselect: true,
},
});
Sending a poll with discord.py
Polls arrived in discord.py 2.4. The duration is a timedelta in whole hours, and add_answer returns the poll, so calls can be chained:
import datetime
import discord
poll = discord.Poll(
question="Which night for the raid?",
duration=datetime.timedelta(hours=48),
multiple=True,
)
poll.add_answer(text="Friday").add_answer(text="Saturday").add_answer(text="Sunday")
await channel.send(poll=poll)
Listening for votes
Every vote fires a MESSAGE_POLL_VOTE_ADD gateway event with user_id, channel_id, message_id, guild_id and answer_id; removing a vote fires MESSAGE_POLL_VOTE_REMOVE. On a poll with multiple answers you get one event per answer. Your bot only receives them with the GUILD_MESSAGE_POLLS intent (1 << 24) for servers, or DIRECT_MESSAGE_POLLS (1 << 25) for DMs.
In discord.js, add the partials as well. Without them the event is skipped for any poll whose message is not in the bot's cache, such as polls posted before your last restart:
const { Client, GatewayIntentBits, Partials } = require('discord.js');
const client = new Client({
intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessagePolls],
partials: [Partials.Message, Partials.Poll, Partials.PollAnswer],
});
client.on('messagePollVoteAdd', (answer, userId) => {
console.log(`${userId} voted for answer ${answer.id}`);
});
client.login(process.env.DISCORD_TOKEN);
Reading results, ending early, exporting voters
- Results: the poll's
resultsobject hasanswer_counts(per answerid,countandme_voted) andis_finalized. While a poll runs, the counts are usually right but not guaranteed; after it ends, Discord runs a final tally and setsis_finalizedto true. A missingresultsfield means "unknown", not zero votes, and an answer missing fromanswer_countshas zero votes. - End early:
POST /channels/{channel.id}/polls/{message.id}/expire. A bot can only end its own polls. - Export voters:
GET /channels/{channel.id}/polls/{message.id}/answers/{answer_id}returns the users who picked that answer, 25 by default and up to 100 per page withlimit, paged withafter. In discord.py,async for voter in answer.voters()does the paging for you. - Polls posted by people: the
pollfield counts as message content. Without the Message Content intent your bot gets it only for its own messages, DMs, messages that mention it, and message context menu commands. - No edits: after creation the poll message cannot be edited, so fix mistakes by ending the poll and posting a new one.
When to use buttons instead
For an anonymous vote, more than 10 options or voting limited to a role, you can skip native polls and build your own with message components. A string select menu holds up to 25 options, an action row holds up to 5 buttons, and your bot answers each click with an ephemeral message, which only the voter can see. Your bot has to answer every click within 3 seconds. It checks the voter's roles before counting and stores the votes in its own database, so nobody in the server can see who voted for what. The trade off: these votes only count while your bot is online. If you run one yourself, our Discord bot hosting Growth plan keeps it up with 512 MB RAM, no sleep mode and an automatic restart when it crashes.
Native Poll or Poll Bot: Which Fits
- Native poll: quick questions, up to 10 answers, open voting is fine, done within a week.
- YAGPDB
/poll: you already use YAGPDB and want a quick reaction poll from a command. - Sesh: anonymous votes, up to 15 options, or picking a date and time for an event.
- Your own bot on the poll API: you want native polls that open on a schedule, run up to 32 days or export their voters.
- Your own bot with buttons: anonymous or role-restricted votes with your own rules, such as blocking alts or votes for yourself.
Whatever you pick, keep the question short, use as few answers as you can so votes do not split, and give people at least a day unless the decision is urgent.
FAQ
Are Discord polls anonymous? No. Discord's Polls FAQ says there is no option to vote anonymously, and Discord's API gives bots the list of users behind every answer. For anonymous votes use a bot with an anonymous setting, such as Sesh, or a button poll that keeps votes in the bot's own database.
Can you see who voted for what in a Discord poll? Votes are tied to accounts. A bot can fetch the voters of each answer through the Get Answer Voters endpoint, up to 100 users per request, and save them, which is also the way to export results.
Is there a /poll command in Discord?
Not from Discord itself: its Polls FAQ says polls cannot be created with a slash command. A working /poll in a server comes from a bot, such as YAGPDB or Sesh.
Why can't I create a poll in a Discord server? Your role is missing the Create Polls permission in that channel. It can be set per role and per channel, so ask a moderator to allow it for your role or in a voting channel.
How long can a Discord poll last? In the app you choose 1 hour, 4 hours, 8 hours, 24 hours, 3 days or 1 week. A bot can set any whole number of hours up to 768, which is 32 days. The creator can end a poll early.
Can I run a Discord poll for multiple dates and times? Yes, for a few options: list each date as an answer and allow multiple answers. For more than 10 slots, or to find when everyone is free, Sesh's time-based options and availability polls fit better.
Related: Discord reaction roles setup, Discord forum channels setup, Discord bot intents and the gateway API, Discord timestamps for event times, Keep a Discord bot online
Sources
All opened on 3 November 2026:
- Discord Support: Polls FAQ (updated 27 October 2026)
- Discord Developer Docs: Poll resource, Message resource, Permissions, Gateway events, Gateway intents, Component reference, Receiving and responding to interactions
- discord.js v14 source: MessagePayload.js, MessagePollVoteAdd.js, Action.js, PollAnswer.js, discord-api-types gateway intents
- discord.py source: poll.py, abc.py (Messageable.send)
- YAGPDB: All commands
- Sesh: Manual, Home page