从discord.py中最接近的匹配用户名获取用户对象

我正在尝试让一个不和谐机器人向服务器中具有最接近匹配用户名的用户发送DM。我所说的最接近匹配的用户名是指,如果给机器人提供用户名的一部分(例如“shin”),它会找到最接近的匹配用户名(例如“shinramen”)。我提供的这段代码仅适用于用户的提及或确切用户名。我尝试过使用 difflib 但不幸的是无法让它工作。我缺少任何更简单的解决方案吗?

async def dm(ctx, member: discord.Member):
  user = await member.create_dm() 
   await user.send('message goes here')


至尊宝的传说
浏览 132回答 3
3回答

喵喵时光机

如果您仍然需要它,或者其他人正在寻找它。用于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

陪伴而非守候

我不知道你为什么需要这个,但你可以得到这样的名字,然后你就可以随心所欲地命名。我做了更多检查,看看该成员在公会中是否有昵称。请记住,这是给作者的,您可以将其更改为您想要的任何内容。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")

回首忆惘然

您不再需要创建 dm 频道。只需使用一个await member.send("Whatever msg")PS: 最接近的匹配用户名是什么意思?您必须提供更多详细信息,因为我认为这没有意义。Discord已经自动为你 做到了 这一点。只需在您想要在不和谐中提及的用户上按 Enter 键即可。他们会自动向您显示建议。我很确定您别无选择,只能提及一名成员才能使该命令发挥作用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python