【问题标题】:How do I mention people in a discord leaderboard for discord.py discord bot我如何在 discord.py discord bot 的不和谐排行榜中提及人
【发布时间】:2021-01-25 18:30:21
【问题描述】:

我一直在使用 discord.py 开发一个不和谐机器人,但在尝试显示排行榜时遇到了一些麻烦。

排行榜目前如下所示:

但是,我希望用户 ID 显示提及。这是我的 Python 代码:

import discord 
from discord.ext import commands
import json
import os

os.chdir('My File Path')

@client.command(aliases = ["lb"])
async def leaderboard(ctx,x = 5):
    users = await get_bank_data()
    leader_board = {}
    total = []
    for user in users:
        name = int(user)
        total_amount = users[user]["wallet"] + users[user]["bank"]
        leader_board[total_amount] = name
        total.append(total_amount)

    total = sorted(total,reverse=True)    

    em = discord.Embed(title = f"Top {x} Richest People" , description = "This is decided on the basis of raw money in the bank and wallet",color = discord.Color(0xfa43ee))
    index = 1
    for amt in total:
        id_ = leader_board[amt]
        member = client.get_user(id_)
        memberName = f"<@{user}>" #Here is where I'm having trouble
        em.add_field(name = f"{index}. {memberName}" , value = f"{amt}",  inline = False)
        if index == x:
            break
        else:
            index += 1

    await ctx.send(embed = em)


async def get_bank_data():
    with open("main-bank.json", "r") as f:
        users = json.load(f)

    return users

这是我的 json 文件代码:

{"User ID of someone": {"wallet": 66.0, "bank": 2000} "User ID of someone": {"wallet": 0, "bank": 1969}, "User ID of someone": {"wallet": 10, "bank": 0}, "User ID of someone": {"wallet": 89, "bank": 0}}

我尝试过memberName = member.mention,但这似乎不起作用。

我的 Python 版本是 3.8.5,我在 MacOS Catalina 上运行。

【问题讨论】:

    标签: python discord discord.py


    【解决方案1】:
    @client.command(aliases = ["lb"])
    async def leaderboard(ctx, x=10):
        users = await get_bank_data()
        leader_board = {}
        total = []
        for user in users:
            name = int(user)
            total_amount = users[user]["wallet"] + users[user]["bank"]
            leader_board[total_amount] = name
            total.append(total_amount)
          
        total = sorted(total, reverse=True)    
    
        em = discord.Embed(title = f"Top {x} Richest People", description = "This is decided on the basis of raw money in the bank and wallet", color = discord.Color(0xfa43ee))
        
        index = 10
        for amt in total:
            id_ = leader_board[amt]
            member = await client.fetch_user(id_)
            name = member.name
            em.add_field(name = f"{index}. {name}", value = f"{amt}", inline = False)
            if index == x:
                break
            else:
                index += 1
    
        await ctx.send(embed = em)
    

    【讨论】:

    • 代码转储不能提供好的答案。你应该解释如何为什么这可以解决他们的问题。我推荐阅读,“How do I write a good answer?"
    【解决方案2】:

    您可以在嵌入中标记(他们不会收到通知)人。

    勾选这个,有可能:https://gyazo.com/118f0251798afd32bdd23d806c694544

    我相信您只需获取消息的作者并在对象末尾添加一个 .mention。

    for user in board:
        description += f"**{board.index(user) + 1}.** {user[0].mention} | Level: {user[1]} | XP: {user[2]}\n"
    msg = discord.Embed(
        color=discord.Color.green(),
        title=f"{str(ctx.guild)}" "s Valley Leaderboard",
        description=description,
    )
    
    await ctx.send(embed=msg)
    

    【讨论】:

      【解决方案3】:

      discord.Member 具有 mention。你的问题是你没有从它自己的成员对象中获取它,而是从memberName 这是一个字符串。

      member = client.get_user(ID_HERE)
      em.add_field(name="User", value = member.mention)
      

      以字符串的形式手动执行可能会奏效,但这是一个坏习惯。

      【讨论】:

        【解决方案4】:

        因此,基本上,您不能在嵌入字段的名称中提及用户,而是只需将值与嵌入名称进行切换即可获得满意的结果。您的代码将如下所示 -

        for amt in total:
                id_ = leader_board[amt]
                member = client.get_user(id_)
                memberName = f"<@{user}>" #Here is where I'm having trouble
                em.add_field(value = f"{index}. {memberName}" , name = f"{amt}",  inline = False)
                if index == x:
                    break
                else:
                    index += 1
        

        【讨论】:

          猜你喜欢
          • 2019-11-19
          • 1970-01-01
          • 2021-05-16
          • 2021-07-04
          • 2020-12-30
          • 2022-01-26
          • 2019-04-12
          • 1970-01-01
          • 2021-05-30
          相关资源
          最近更新 更多