当另一个人使用命令时,如何对 discord.py 机器人进行编程以通知我?
Posted
技术标签:
【中文标题】当另一个人使用命令时,如何对 discord.py 机器人进行编程以通知我?【英文标题】:How to program a discord.py bot to dm me when a command is used by another person? 【发布时间】:2021-09-05 14:52:48 【问题描述】:我想创建一个命令,人们可以使用它向我发送建议。他们会使用命令“!suggest”,然后是他们的输入,然后机器人私下将整个消息发送给我。但是,我正在努力让机器人 dm 我而不是命令的作者。
if message.content.startswith('!suggest'):
await message.author.send(message.content)
这里的问题在于代码中的author
部分-而不是每次都 dming 我,它会 dm 键入命令的人,这对我没用。我怎样才能用我的不和谐 ID 替换“作者”,以使其与我和只有我有关?我以前问过这个问题,但所有答案都对我不起作用。这些是我得到但不起作用的解决方案:
message.author.dm_channel.send("message")
,但这是同一个问题,并没有摆脱作者问题。
me = await client.get_user_info('MY_SNOWFLAKE_ID')
await client.send_message(me, "Hello!")
这段代码对我也不起作用。每次 dming 的用户都是相同的,所以我不需要首先运行 get_user_info。每当第二行运行时,我都会收到错误代码,因为 MyClient 无法使用 send_message 属性。
【问题讨论】:
【参考方案1】:您的代码来自旧的不和谐版本。它已在 discord.py 重写中进行了更改。我还建议您使用discord.ext.commands
而不是使用on_message
手动读取命令。
至于dm,只需使用
your_id = 123456789012345678
me = client.get_user(your_id)
await me.send("Hello")
请注意,它需要启用成员意图。如果您没有启用它,请使用await fetch_user(your_id)
。另外,请注意,如果多个用户同时使用命令,也可能会导致速率限制。
文档:
get_user
fetch_user
User.send
【讨论】:
【参考方案2】:@client.command()
async def suggest(ctx, message = None):
if message == None:
await ctx.send("Provide a suggestion")
else:
await ctx.your_id.send("message")
请不要介意缩进
【讨论】:
【参考方案3】:您可以通过以下方式对用户进行 dm:
user = client.get_user(your_id_here)
await user.send('work!')
常见问题解答:https://discordpy.readthedocs.io/en/stable/faq.html#how-do-i-send-a-dm
如果你想要这里的完整代码:
@client.command()
async def suggest(ctx, *, suggest_text):
user_suggestor = ctx.author
user = client.get_user(user_id) # replace the user_id to your user id
if suggest_text == None:
await ctx.send("Enter your suggestion! example : !suggest your suggest here")
else:
await user.send(f"user_suggestor.name sent an suggestion! \nSuggestion : suggest_text") # the \n thing is to space
稍后谢谢我:D
【讨论】:
我在使用user = client.get_user
时仍然不断收到错误,它一直说它没有'send'属性。以上是关于当另一个人使用命令时,如何对 discord.py 机器人进行编程以通知我?的主要内容,如果未能解决你的问题,请参考以下文章