gpt4 book ai didi

python - Discord 机器人阅读 react

转载 作者:太空狗 更新时间:2023-10-30 00:04:43 26 4
gpt4 key购买 nike

我需要实现一些功能,其中一个功能是实现民意测验类型的功能。由于某些政策,不能使用公共(public) Discord 机器人,所以我们必须自己实现一些东西。昨天做了一些研究,能够使用 python3 和来自 discord.extcommands api 制作基 native 器人。现在我需要弄清楚的是:

  1. 阅读用户对消息添加的 react ?
  2. 创建带有反应的消息(比如创建 react 投票的机器人?)
  3. 固定消息?
  4. 我相信从 ctx 我可以得到 user tags(管理员等)。有更好的方法吗?

Commands reference page 上找不到任何有用的信息或者我可能正在查看错误的文档。任何帮助将不胜感激。

谢谢


已更新:谢谢大家。现在我被困在如何添加表情符号上,这是我的代码

poll_emojis = {0: ':zero:', 1: ':one:', 2: ':two:', 3: ':three:', 4: ':four:'}

@client.event
async def on_message(message):
if message.author == client.user:
return

if message.content.startswith('$create_poll'):

poll_content = message.content.split('"')
poll_text = poll_content[1]
poll_options = []
poll_option_text = ''
count = 0
for poll_option in poll_content[2:]:
if poll_option.strip() != '':
poll_options.append(poll_option)
poll_option_text += '{0}: {1}\t'.format(poll_emojis[count], poll_option)
count += 1

posted_message = await message.channel.send('**{0}**\n{1}'.format(poll_text, poll_option_text))

count = 0
for poll_option in poll_options:
await posted_message.add_reaction(Emoji(poll_emojis[count]))
count += 1

最佳答案

顺便说一句,假设您正在启动这个项目,并且已经在使用重写文档,请确保您使用的是重写版本。这里有一些关于如何确定的问题,如果你不是,如何获得它,但它有更好的文档记录并且更容易使用。我在下面的回答假设您使用的是

  1. Message.reactionsReaction 的列表秒。你可以用

    得到 react 对他们计数的映射
    {react.emoji: react.count for react in message.reactions}
  2. 您可以在发布后立即对消息使用react:

    @bot.command()
    async def poll(ctx, *, text):
    message = await ctx.send(text)
    for emoji in ('👍', '👎'):
    await message.add_reaction(emoji)
  3. 您可以使用 Message.pin : 等待消息.pin()

我不确定您所说的“user tags”是什么意思。你是指角色吗?

我会把你的命令写成

@bot.command()
async def create_poll(ctx, text, *emojis: discord.Emoji):
msg = await ctx.send(text)
for emoji in emojis:
await msg.add_reaction(emoji)

请注意,这仅适用于自定义表情符号,即您已添加到自己服务器的表情符号(这是因为 discord.py 对 unicode 表情符号和自定义表情符号的处理方式不同。)这将接受如下命令

!create_poll "Vote in the Primary!" :obamaemoji: :hillaryemoji:

假设这两个表情符号在您发送命令的服务器上。

有了新的commands.Greedy转换器,我会像这样重写上面的命令:

@bot.command()
async def create_poll(ctx, emojis: Greedy[Emoji], *, text):
msg = await ctx.send(text)
for emoji in emojis:
await msg.add_reaction(emoji)

所以调用会更自然一点,没有引号:

!create_poll :obamaemoji: :hillaryemoji: Vote in the Primary!

关于python - Discord 机器人阅读 react ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51737538/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com