亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從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 關注
  • 158 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號