python - 不和谐 py - message.mentions "else"没有任何结果

标签 python python-3.x discord discord.py

我想要获取消息中提到的用户并向他发送私有(private)消息。这工作没有问题,但现在我想为该情况添加一条消息,即提到的成员不在同一服务器上。

我进行了很多搜索,现在尝试了 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”部分,机器人什么也没做。他仍然在聊天中发布带有“无效”ping 的消息,并且只是忽略它。我可以做什么来解决这个问题?

最佳答案

您尝试执行的操作存在设计错误。 在 Discord 中,如果用户不在同一台服务器上,您将无法提及一个用户,因此您正在检查的内容根本不会起作用,目前您的代码非常漂亮大量检查所提到的用户是否存在,除非他在执行命令的同时离开公会,否则这种情况总是会发生。

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

@user123 blablabla

这是有效的,因为 Discord 内部缓存可以在您的服务器中找到user123,并且提到,这意味着点击“@user123”将向我们显示一个目标他的头像,他的角色或者其他什么。

但是,如果您尝试对无效用户执行相同的操作,假设notuser321:

@notuser321 blablabla

这不是一个提及,例如您知道notuser321是谁,但他与机器人位于同一服务器中。 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']

关于python - 不和谐 py - message.mentions "else"没有任何结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65800974/

相关文章:

python - 如何获取对discord.py中的消息使用react的成员列表?

python - 在python中寻找最小值

Python:循环在python中打开多个文件夹和文件

python - 使用 Python 编辑和创建 HTML 文件

python - Python 3.X 中同名的类型和函数?

javascript - Discord.js 机器人正在删除所有消息

python - 如何给一个命令多个名称?

python - 如何在 apache 下从 mod_python 写入日志?

python - NLP - 当我的文本为 "lowering"时,有些单词会失去频率而不是添加更多单词

python-3.x - 在Python3脚本中如何在多个环境中使用shebang行和virtualenvwrapper