You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于使用discord.py实现Discord原生样式投票的问题求助

关于使用discord.py实现Discord原生样式投票的问题求助

我的问题:

我想给我的机器人添加投票功能,但不想用那种基于表情反应的基础投票,而是想做用户平时自己创建的那种原生投票。我查了官方文档没找到相关方法,想问问有没有可行的实现方式?

编辑:我没在文档里死磕,而是自己摸索发现了Poll类,但相关的文档很少,或者可能我没找对地方。

编辑编辑:我尝试写了这段代码:

p = discord.Poll(question="idk", duration=timedelta(hours=1.0))
p.add_answer(text="1")
p.add_answer(text="2")
await ctx.send(p)

结果机器人只发送了一串对象字符串:<Poll duration=1:00:00 question="idk" answers=[<PollAnswer id=1 media=>, <PollAnswer id=2 media=>]>

完全搞不懂怎么回事了——到底要怎么才能把它发送成真正的原生投票啊?


解决方案:

嘿,问题出在你调用ctx.send()的方式上!你直接把Poll对象当成消息内容传进去了,但discord.py的send()方法需要通过**poll专属参数**来传递原生投票对象,而不是直接丢给默认的内容参数。

修正后的代码应该是这样的:

from datetime import timedelta
import discord

# 创建Poll对象的步骤不变
p = discord.Poll(question="idk", duration=timedelta(hours=1.0))
p.add_answer(text="1")
p.add_answer(text="2")

# 重点:通过poll参数发送投票
await ctx.send(poll=p)

另外给你补充几个需要注意的点:

  • 确保你用的是最新版的discord.py,原生Poll功能是比较新的特性,旧版本根本没有这个类和参数,直接用pip install -U discord.py就能更新到最新版。
  • Discord原生投票最多支持10个选项,每个选项的文本长度也有上限(具体可以参考Discord官方的API规则),别超出限制哦。
  • 机器人得有对应频道的发送消息权限,而且所在服务器也得允许创建投票,不然可能会报错。

按照这个改完之后,发送出去的就是和用户手动创建一模一样的原生投票啦,用户可以直接点击选项投票,完全符合你的需求~

备注:内容来源于stack exchange,提问作者Uzi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 12:07:58