【问题标题】:How to edit a message in Discord.py?如何在 Discord.py 中编辑消息?
【发布时间】:2020-08-22 22:12:16
【问题描述】:

我正在使用它向服务器上的每个人发送 dm,

@bot.command(pass_context = True)
@commands.has_permissions(manage_messages=True)
async def dm_all(ctx, *, args=None):
    sended_dms = 0
    rate_limit_for_dms = 20
    time_to_wait_to_avoid_rate_limit = 60

    if args != None:
        members = ctx.guild.members
        for member in members:
            try:
                await member.send(args)
                await ctx.channel.send(" sent to: " + member.name)

            except:
                await ctx.channel.send("Couldn't send to: " + member.name)
            sended_dms += 1
            if sended_dms % rate_limit_for_dms == 0: 
                asyncio.sleep(time_to_wait_to_avoid_rate_limit) 

    else:
        await ctx.channel.send("Please provide a message to send!")

代码很完美,运行也很好。它在每个 dm 发送到 {member.name} 的 dm 之后发送日志,我想要的是在每个日志(即 msg 已发送到.....)之后,对于下一个日志,它应该编辑上一个消息。 (对不起,我不善于解释:p)

它会像这样在每个 dm 之后发送一条消息, 发送到 {member.name} 然后下一个发送到 {member.name}

我想要的是它不应该一次又一次地发送它,而是应该为每个 dm 一次又一次地编辑第一条消息。

如果您能提供帮助,我将不胜感激!

【问题讨论】:

    标签: python discord discord.py


    【解决方案1】:

    您可以使用Message.edit。以下是如何让它在您的代码中工作:

    @client.command(pass_context = True)
    @commands.has_permissions(manage_messages=True)
    async def dm_all(ctx, *, args=None):
        sended_dms = 0
        rate_limit_for_dms = 20
        time_to_wait_to_avoid_rate_limit = 60
    
        if args != None:
            members = ctx.guild.members
            firstTime = True
            msg = None
            for member in members:
                if not member.bot:
                    try:
                        await member.send(args)
                        if firstTime:
                            msg = await ctx.channel.send(" sent to: " + member.name)
                            firstTime = False
                        else:
                            await msg.edit(content=" sent to: " + member.name)
                    except Exception as e:
                        await msg.edit(content="Couldn't send to: " + member.name)
                    if sended_dms % rate_limit_for_dms == 0: 
                        await asyncio.sleep(time_to_wait_to_avoid_rate_limit) 
        else:
            await ctx.channel.send("Please provide a message to send!")
    

    还添加了一行忽略机器人用户。

    【讨论】:

      【解决方案2】:

      要编辑消息,您可以使用Message.edit。这是一个例子:

      random_message = await ctx.send("old message")
      await random_message.edit("new message")
      

      此外,如果您查看 documentation 或其他 stackoverflow 问题,您可以轻松找到答案。

      【讨论】:

      • 你能在我分享的代码中展示它是如何做到的吗? @Nurqm
      猜你喜欢
      • 2023-04-02
      • 2021-12-29
      • 2020-03-17
      • 2021-03-19
      • 1970-01-01
      • 2021-07-31
      • 1970-01-01
      • 2020-08-16
      相关资源
      最近更新 更多