如何让您的 Discord 机器人说出具体内容,然后删除上一条消息

Posted

技术标签:

【中文标题】如何让您的 Discord 机器人说出具体内容,然后删除上一条消息【英文标题】:How to get your Discord bot to say something specific, then delete the previous message 【发布时间】:2020-08-30 23:05:41 【问题描述】:

我是使用 discord.py 的新手,基本上我只是想让我的 discord 机器人说点什么然后删除以前的文本,所以例如我想输入“/say hello”然后我希望机器人抓住那个,删除前缀并打印“你好”,我已经用谷歌搜索并找到了另一个指南,但没有后续答案,当我尝试他们错误的解决方案时,下面是我使用的代码

    import discord
from discord.ext import commands

bot = discord.Client()
prefix = "/"

@bot.event
async def on_ready():
    print("Online")

@bot.event
async def on_message(message):
    args = message.content.split(" ")[1:]
    if message.content.startswith(prefix + "say"):
        await bot.delete_message(message)
        await bot.send_message(message.channel, " ".join(args))

bot.run("token")

这是控制台打印出来的错误

C:\Users\unknownuser\anaconda3\envs\discordbot\pythonw.exe C:/Users/unknownuser/PycharmProjects/discordbot/bot.py
Online
Ignoring exception in on_message
Traceback (most recent call last):
  File "C:\Users\unknownuser\anaconda3\envs\discordbot\lib\site-packages\discord\client.py", line 313, in _run_event
    await coro(*args, **kwargs)
  File "C:/Users/unknownuser/PycharmProjects/discordbot/bot.py", line 15, in on_message
    await bot.delete_message(message)
AttributeError: 'Client' object has no attribute 'delete_message'

当我开始学习它背后的文档和逻辑时,我应该开始自己弄清楚,但这个让我很难过,不胜感激

【问题讨论】:

【参考方案1】:

看起来您正在使用旧版本 discord.py 的教程。 在最近的-重写-版本中有一些major changes。

代码示例

# using the command decorator
@bot.command()
async def say(ctx, *, sentence):
    await ctx.message.delete()
    await ctx.send(sentence)

#############################################

# using the on_message event
@bot.event
async def on_message(message):
    args = message.content.split(" ")[1:]
    if message.content.startswith(prefix + "say"):
        await message.delete()
        await message.channel.send(" ".join(args))
    else:
        await bot.process_commands(message) # allows decorated commands to work

参考资料:

Message.delete() Bot.process_commands() Messageable.send()

【讨论】:

谢谢,在阅读完文档后,我确实让它工作了,有点像你尝试弄清楚的事情之一,放弃。然后在等待有人帮助你的时候,你想通了。补充一下,你能解释一下使用消息事件和命令检测器的区别吗 使用装饰器时,组织代码要容易得多——尤其是对于大型机器人。它使您可以将代码拆分为“cogs”(只是不同的模块),并且看起来更整洁。处理争论也容易得多。

以上是关于如何让您的 Discord 机器人说出具体内容,然后删除上一条消息的主要内容,如果未能解决你的问题,请参考以下文章

如何阻止我的 Discord 机器人调用错误的命令?

Discord.py - 如何检测用户是不是提到/ping 机器人

Bot的移动状态指示器

让您的不和谐机器人保存您发送的消息

如何在 discord.py 中将值合并到一条消息中

Discord.js 如何使用 sqlite 快速发送消息作者