为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

至尊宝的传说 2023-06-27 14:38:12
我正在尝试让一个不和谐机器人向服务器中具有最接近匹配用户名的用户发送DM。我所说的最接近匹配的用户名是指,如果给机器人提供用户名的一部分(例如“shin”),它会找到最接近的匹配用户名(例如“shinramen”)。我提供的这段代码仅适用于用户的提及或确切用户名。我尝试过使用 difflib 但不幸的是无法让它工作。我缺少任何更简单的解决方案吗?async def dm(ctx, member: discord.Member):   user = await member.create_dm()     await user.send('message goes here')
查看完整描述

3 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

如果您仍然需要它,或者其他人正在寻找它。


用于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


查看完整回答
反对 回复 2023-06-27
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

我不知道你为什么需要这个,但你可以得到这样的名字,然后你就可以随心所欲地命名。我做了更多检查,看看该成员在公会中是否有昵称。


请记住,这是给作者的,您可以将其更改为您想要的任何内容。


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")


查看完整回答
反对 回复 2023-06-27
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

您不再需要创建 dm 频道。只需使用一个await member.send("Whatever msg")

PS: 最接近的匹配用户名是什么意思?您必须提供更多详细信息,因为我认为这没有意义。Discord已经自动为你 做到了 这一点。只需在您想要在不和谐中提及的用户上按 Enter 键即可。他们会自动向您显示建议。我很确定您别无选择,只能提及一名成员才能使该命令发挥作用。


查看完整回答
反对 回复 2023-06-27
  • 3 回答
  • 0 关注
  • 131 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信