不和谐的信息。提到“其他”没有任何意义

2024-04-20 14:31:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我想获得一条消息中提到的用户,并向他发送一条私人消息。这是没有问题的工作,但现在我想为这个案例添加一条消息,即提到的成员不在同一台服务器上

我搜索了很多,现在尝试了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的消息,只是忽略了它。我能做些什么来解决这个问题


Tags: sendid消息messagegetifbotnot
1条回答
网友
1楼 · 发布于 2024-04-20 14:31:47

在你尝试做的事情中有一个设计错误。 在Discord中,如果用户不在同一台服务器上,您将无法提及用户,因此您正在检查的内容将根本无法工作,目前您的代码几乎是在检查所提及的用户是否存在,除非他在执行命令的同时离开公会,否则这种情况将始终发生

例如,要使命令正常工作,您需要提及服务器中的用户user123,请执行以下操作:

@user123 blablabla

这是因为Discord内部缓存可以在您的服务器中找到user123,而且它是提到的,这意味着点击“@user123”将向我们显示一个目标及其化身、角色或其他任何东西

但是,如果您尝试对一个无效用户执行相同的操作,那么让我们假设notuser321

@notuser321 blablabla

这并不重要,例如,您知道谁是notuser321,但他与bot在同一台服务器上。Discord无法从缓存中检索此用户,并且它不被视为提及,只是一个字符串,因此不会触发代码的任何部分,因为len(message.mentions)将被0

您可以尝试使用regular expressionsmessage.content内查找标记的尝试。例如:

import re

message = "I love @user1 and @user2"
mention_attempt = re.findall(r'[@]\S*', message)   # ['@user1', '@user2']

相关问题 更多 >