我想获得一条消息中提到的用户,并向他发送一条私人消息。这是没有问题的工作,但现在我想为这个案例添加一条消息,即提到的成员不在同一台服务器上
我搜索了很多,现在尝试了3个多小时来找到解决方案
问题展示:https://youtu.be/PYZMVXYtxpE
这是我的密码:
@bot.event
async def on_message(message):
if len(message.mentions) == 1:
membe1 = message.mentions[0].id
membe2 = bot.get_user(membe1)
guild = bot.get_guild(message.author.guild.id)
if guild.get_member(membe1) is not None:
await membe2.send(content=f"you was mentioned in the server chat")
else:
embed2 = discord.Embed(title=f"» :warning: | PING not possible", description=f"not possible")
await message.channel.send(content=f"{message.author.mention}", embed=embed)
await message.delete()
return
第一部分工作正常,但在“else
”部分,bot什么也不做。他仍然在聊天中发布带有“无效”ping的消息,只是忽略了它。我能做些什么来解决这个问题
在你尝试做的事情中有一个设计错误。 在Discord中,如果用户不在同一台服务器上,您将无法提及用户,因此您正在检查的内容将根本无法工作,目前您的代码几乎是在检查所提及的用户是否存在,除非他在执行命令的同时离开公会,否则这种情况将始终发生
例如,要使命令正常工作,您需要提及服务器中的用户user123,请执行以下操作:
这是因为Discord内部缓存可以在您的服务器中找到user123,而且它是提到的,这意味着点击“@user123”将向我们显示一个目标及其化身、角色或其他任何东西
但是,如果您尝试对一个无效用户执行相同的操作,那么让我们假设notuser321:
这并不重要,例如,您知道谁是notuser321,但他与bot在同一台服务器上。Discord无法从缓存中检索此用户,并且它不被视为提及,只是一个字符串,因此不会触发代码的任何部分,因为
len(message.mentions)
将被0
您可以尝试使用regular expressions在
message.content
内查找标记的尝试。例如:相关问题 更多 >
编程相关推荐