【问题标题】:Deleting specific messages that was sent by the bot and sent by the user. Discord.py rewrite删除由机器人发送并由用户发送的特定消息。 Discord.py 重写
【发布时间】:2019-11-04 22:45:01
【问题描述】:

我在 discord.py 重写及其迁移方面遇到了很多麻烦。我查看了迁移到 v1.0 的站点,它说要放入 message.delete(),所以我做到了,但我意识到这不起作用,所以我也放入了 ctx。但这让它犯了一个错误。目前有两个命令出现此错误。

我已经尝试将消息放入变量中。

@client.command()
async def clear(ctx, amount=100):
    message = ctx.message
    channel = ctx.message.channel
    messages = []
    await ctx.channel.purge(limit=int(amount+1))
    mymessage = await channel.send('Messages deleted')
    await ctx.message.delete(mymessage)

@client.command()
async def verify(ctx, *, arg):
    print(ctx.message.channel.id)
    print(ctx.message.author)
    if ctx.channel.id == 521645091098722305:
        role = await ctx.guild.create_role(name=arg)
        await ctx.message.author.add_roles(role)
        mymessage = await ctx.send('Done! Welcome!')
        await ctx.message.delete(mymessage)
        await ctx.message.delete(ctx.message)

我预计输出会删除该消息。对于明确的,它会删除它,然后将其归还。对于验证,它只是保持不变并显示错误: 从 exc 引发 CommandInvokeError(exc) discord.ext.commands.errors.CommandInvokeError:命令引发异常:TypeError:delete() 采用 1 个位置参数,但给出了 2 个

此外,我的角色验证有时会执行 3 次。我已经进入任务管理器并杀死了所有的蟒蛇,但它仍然这样做。有一次当我清理它说完成!也欢迎。如果你也能回答这个问题,我会很高兴!提前谢谢你。

【问题讨论】:

    标签: python-3.x discord.py-rewrite


    【解决方案1】:

    Message.delete 不接受任何参数。这是您在要删除的消息上调用的方法。改变

    await ctx.message.delete(mymessage)
    await ctx.message.delete(ctx.message)
    

    await mymessage.delete()
    await ctx.message.delete()
    

    【讨论】:

    • 非常感谢,但我不知道为什么,但命令播放不止一次。 (验证)
    • 其实是nvm,现在可以了。非常感谢您的帮助!
    • 我之前在问题中没有提到这一点,但是你如何在重写中将角色放入变量中?
    • await ctx.message.author.add_roles(ctx.guild.get_role(537601033422241821))这是我到目前为止得到的,但它不起作用:File "C:\Users\Daniel\AppData\Local\Programs\Python\Python36\lib\site-packages\discord\member.py", line 532, in add_roles await req(guild_id, user_id, role.id, reason=reason) AttributeError: 'NoneType' object has no attribute 'id'
    • 你确定这是正确的 id 吗?也可以使用discord.utils.get通过名称获取:get(ctx.guild.roles, name="my_role")
    【解决方案2】:
    @client.command(pass_context=True)
    async def delete(ctx, arg):
        arg1 = int(arg) + 1
        await client.purge_from(ctx.message.channel, limit=arg1)
    

    !delete 10 - 删除最后 10 个帖子

    【讨论】:

    • 我正在重写,所以这对我不起作用。对不起。别担心,我还是修好了 :) 谢谢你的帮助。
    猜你喜欢
    • 2021-10-14
    • 1970-01-01
    • 2021-01-19
    • 2019-03-06
    • 1970-01-01
    • 2020-10-10
    • 2018-11-25
    • 2020-11-04
    • 2019-03-01
    相关资源
    最近更新 更多