【问题标题】:edit message when someone reacts to it not working当有人对其做出反应时编辑消息不起作用
【发布时间】:2020-08-27 10:29:09
【问题描述】:

所以我一直在尝试制作一个不和谐的机器人,它会在您向该消息添加反应时编辑该消息,但由于某种原因,每当我做出反应时,该消息都不会编辑,并且我没有收到任何错误。有谁知道为什么会这样?一切正常到反应部分

请记住,我对 python 还很陌生,所以我可能在这里错过了一些基本的东西。

是的,我在代码中有令牌,只是出于明显的原因没有将其发送到这里

import discord
from discord.ext.commands import Bot
from discord.utils import get
import asyncio
import requests
import pprint

client = Bot('!')

@client.event
async def on_ready():
    print("BOT READY FFS")




partymembers = []


@client.event
async def on_message(message):

  def check(reaction, user):
    return user == message.author and str(reaction.emoji) in ['✅']

  if message.content.startswith('d!createparty'):
    message1 = message.content.split()
    floor = message1[1]
    reqslvl = message1[2]
    dupes = message1[3]
    if floor not in ['entrance', 'f1', 'f2', 'f3', 'f4']:
        return
    elif dupes not in ['yes', 'no']:
        return
    else:
      channel = client.get_channel(738323108158767134)
      partycreator = message.author.id
      partymembers.append("<@" + str(partycreator) + ">")
      embed1=discord.Embed(color=0x15ff00)
      embed1.add_field(name="Party Members:", value=partymembers, inline=False)
      embed1.add_field(name="Floor:", value=floor, inline=False)
      embed1.add_field(name="Level req:", value=reqslvl, inline=False)
      embed1.add_field(name="Dupes:", value=dupes, inline=False)
      coolembedmsg = await channel.send(embed=embed1)
      await coolembedmsg.add_reaction('✅')
      messageid = message.id
      memberjoin = await client.wait_for("reaction_add", check=check)
      if memberjoin:
        users = set()
        for reaction in message.reactions:
          async for user in reaction.users():
            users.append(user)
            if len(users) > 5:
              return
            else:
              # this is where message would be edited, probably something to do with the list not being updated or something
              for newmember in users:
                partymembers.append(newmember)
                embed2=discord.Embed(color=0x15ff00)
                embed2.add_field(name="Party Members:", value=partymembers, inline=False)
                embed2.add_field(name="Floor:", value=floor, inline=False)
                embed2.add_field(name="Level req:", value=reqslvl, inline=False)
                embed2.add_field(name="Dupes:", value=dupes, inline=False)
                await coolembedmsg.edit(embed=embed2)

【问题讨论】:

    标签: python discord discord.py


    【解决方案1】:

    尝试为您的 wait_for() 事件添加超时

    memberjoin = await client.wait_for("reaction_add", timeout=60.0, check=check)
    

    【讨论】:

    • tru 并将 memberjoin 更改为反应,用户。像这样 ->> reaction, user = await client.wait_for("reaction_add", timeout=60.0, check=check)
    • 我很确定这不会改变任何东西,因为会员加入只是一个确认的东西,这里可能是错的,不知道
    • @SkeldrBoii 实际上它可能是修复。 on_reaction_add 事件返回反应和用户。在您将 memberjoin 更改为 'reaction, user' 后,将您的 if 语句更改为 --> if reaction.emoji == '✅': 还将您的检查功能更改为 --> return 反应。 message.id == msg.id 和 user == ctx.author
    • 我是这样离开 ctx.author 还是用其他东西替换 ctx?
    猜你喜欢
    • 1970-01-01
    • 2021-05-05
    • 2021-04-04
    • 2021-05-08
    • 2019-09-11
    • 2020-10-29
    • 2020-12-14
    • 1970-01-01
    • 2021-08-08
    相关资源
    最近更新 更多