【发布时间】:2020-11-10 09:32:00
【问题描述】:
discord.py
我为什么使用这个:
我正在尝试让我的机器人使用
检测机器人的嵌入消息(以获取玩家的游戏内货币)等待客户端.wait_for
问题
但是,它不知何故无法检测到机器人发送的嵌入。只要它与嵌入一起发送纯文本或它自己发送纯文本,它仍然会承认它。
@client.event
async def on_message(message):
如果机器人发送了带有或不带有文本的嵌入,代码仍然可以工作。
可能的原因:
1. ❌已经测试并证明不是原因❌我的机器人无法读取来自机器人的消息
2. 可能:我的机器人比我正在测试的机器人慢,所以一旦我的机器人检测到用户发送的消息让机器人做出反应,机器人已经回复了另一条消息,所以机器人仍在等待不存在的消息。 我还没有找到一种可行的、不费时的方法来测试这个
3. 可能:{这个问题}
其他
所有帮助将不胜感激!还请在此处指出我的代码中的任何错误,以及我是否使用正确的代码来检测机器人的嵌入和/或消息。我也很欣赏编写代码的其他方法。
代码
我当前代码的一部分是:
def pred(m):
return m.author == client.get_user(490707751832649738)
try:
msg = await client.wait_for('message', check=pred, timeout=10.0)
except asyncio.TimeoutError:
await message.channel.send('Looks like Taco-shack is down :/')
else:
await message.channel.send('You said {0.content}, {0.author}.'.format(msg))
请忽略缩进。这是我的代码中的新鲜copypasta。我从 API https://discordpy.readthedocs.io/en/latest/migrating.html#waiting-for-events修改它
输出:
Looks like taco-shack is down 这是 asyncio 超时错误
附:这是我创建堆栈溢出帐户后的第一个问题,我意识到已经有很多文章可以参考。所以我一直在寻找,但我只是找不到这个问题的解决方案。请忽略我糟糕的格式!
编辑:
针对我的cmets,我会说得更清楚
在 Eric 的帮助下,我修改了上面的代码。他评论了一些让我改进代码的东西;)
谢谢
针对 Patrick 的评论(非常感谢您将我引导至 https://stackoverflow.com/help/minimal-reproducible-examrple 帮助页面,非常感谢;)),您可以通过以下几个步骤来重现代码。
重现问题的步骤
步骤1: 转到 Discord 开发者门户并创建 2 个机器人,一个用于发送嵌入,另一个用于测试(如果您有一个可以发送嵌入的随机机器人
步骤2: 邀请机器人到您的服务器
步骤3:
一旦您在任何频道中发送消息,就可以编写第一个机器人来发送嵌入,这可能是一个简单的嵌入,例如 How can I send an embed via my Discord bot, w/python? 中的那个,也可能是添加到它的 else 并且 else 发送一些纯文本。 记得使用client.run()!
步骤4 像这样编写第二个机器人:
@client.event
async def on_message(message):
def pred(m):
return m.author == client.get_user(490707751832649738)
try:
msg = await client.wait_for('message', check=pred, timeout=10.0)
except asyncio.TimeoutError:
await message.channel.send('Looks like Taco-shack is down :/')
else:
await message.channel.send('You said {0.content}, {0.author}.'.format(msg))
client.run('token')
步骤5: 运行这两个机器人!
更多问题:
我似乎不明白使用 message.embeds 有什么用。我正在尝试等待在 on.message 下发送消息以在有人键入 .balance 以查看其帐户的值之后继续线程,以便机器人可以获取信息。但是,它无法识别 bot 发送的消息
合法性/道德性
产生这个机器人的想法是因为 Carl 无法发送消息 ID。
这部分是看用户还剩下多少钱,以及该人是否成功发送捐款,以免虚假捐款造成频道混乱
这个机器人不是一个自我机器人。
不应被视为一体。
** 如果您发现这不合法,请给出“否”回答或评论它不合法(我更喜欢后者)**
【问题讨论】:
-
你试过
msg.embeds吗? -
stackoverflow.com/questions/62601894/… 这篇文章有你的答案。祝你有美好的一天
-
没有。它似乎没有回答我的问题。
-
但是,我正在尝试使用 await client.wait_for(),因为它应该从上一个命令继续执行线程
-
@client.event async def on_message(message):做检测嵌入
标签: python discord.py