关于使用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
相关产品推荐
相关产品推荐

