[英]Get user object from nearest matching username in discord.py
我試圖讓一個不和諧的機器人向服務器中最接近匹配用戶名的用戶發送一個 DM。 通過最近匹配的用戶名,我的意思是,如果給機器人一個用戶名的一部分,比如“shin”,它會找到最接近的匹配用戶名,比如“shinramen”。 我提供的此代碼僅適用於用戶的提及或確切用戶名。 我曾嘗試使用 difflib,但不幸的是無法讓它工作。 有沒有我缺少的更簡單的解決方案?
async def dm(ctx, member: discord.Member):
user = await member.create_dm()
await user.send('message goes here')
您不再需要創建 dm 頻道。 只需使用await member.send("Whatever msg")
PS:最近匹配的用戶名是什么意思? 您必須提供更多詳細信息,因為我認為這沒有任何意義。 不和諧已經自動會替你。 只需在您要不和諧地提及的用戶上按 Enter 鍵即可。 他們會自動向您顯示建議。 我很確定你別無選擇,只能提到命令的成員。
我不知道你為什么需要這個,但你可以得到這樣的名字,然后你可以隨心所欲。 我做了更多的檢查,看看該成員是否在公會中有一個昵稱。
請記住,這是給作者的,您可以根據需要進行更改。
import difflib
@bot.command()
async def nearest(ctx):
all_names = []
for member in ctx.guild.members:
if ctx.author == member:
continue # skip the author
if member.nick:
all_names.append(member.nick)
else:
all_names.append(member.name)
if ctx.author.nick:
close_names = difflib.get_close_matches(ctx.author.nick, all_names)
else:
close_names = difflib.get_close_matches(ctx.author.name, all_names)
if close_names:
await ctx.send(" - ".join(close_names))
else:
await ctx.send("You are unique")
您可以使用此獲取 dm 的用戶。
user = bot.get_member_named('Name here')
user.send("Found your brother")
如果您仍然需要它,或者如果其他人正在尋找它。
使用discord.utils.find
查找最近的成員對象。 這是它的成員轉換器示例:
class Member(commands.Converter):
async def convert(self, ctx, argument):
try:
member_converter = commands.MemberConverter()
member = await member_converter.convert(ctx, argument)
except commands.MemberNotFound:
member = discord.utils.find(
lambda m: m.name.lower().startswith(argument),
ctx.guild.members
)
if member is None:
raise commands.MemberNotFound(argument)
return member
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.