【发布时间】:2021-06-07 14:30:32
【问题描述】:
我目前正在开发一个 Discord Bot,它从 Google 电子表格中获取数据并将其转换为 Pandas DataFrame。使用所述 DataFrame,Bot 然后输出用户要求的特定数据。 电子表格如下所示: 名称 |氏族 |国家 |注释(这些是列,行中是大约 1000 名游戏玩家的相应信息)。 我在完整的基础上创建了几个不同的 DataFrame:
# Fields
fields_with_clan = ['Name', 'Clan']
fields_just_name = ['Name']
fields_with_country = ['Name', 'Country']
fields_fullinfo = ['Name', 'Clan', 'Country']
fields_countries_only = ['Country']
# Respective DataFrames for each field
df = pd.read_csv(f"https://docs.google.com/spreadsheets/d/{sheet_id}/export?format=csv")
df_players_clans = pd.read_csv(f"https://docs.google.com/spreadsheets/d/{sheet_id}/export?format=csv",
usecols=fields_with_clan)
df_players = pd.read_csv(f"https://docs.google.com/spreadsheets/d/{sheet_id}/export?format=csv",
usecols=fields_just_name)
df_players_countries = pd.read_csv(f"https://docs.google.com/spreadsheets/d/{sheet_id}/export?format=csv",
usecols=fields_with_country)
df_players_fullinfo = pd.read_csv(f"https://docs.google.com/spreadsheets/d/{sheet_id}/export?format=csv",
usecols=fields_fullinfo)
df_countries_only = pd.read_csv(f"https://docs.google.com/spreadsheets/d/{sheet_id}/export?format=csv",
usecols=fields_countries_only)
我还创建了一个字典,将氏族的常用拼写(缩写)翻译成电子表格中使用的完整名称:
Dict_Clans = {'zt': 'Zero Tolerance - ƵŦ✿', 'kaveh': 'Kaveh - :K', 'dw': 'Deadly Warriors - Ðฬ',
'nf': 'Next Force - NF', ... }
现在,机器人的一个功能是使用以下代码输出 Clan 的每个成员:
# List all members of given clan
@client.command(name='members')
async def members(context, *, index: str):
if df_players[df_players_clans.values == [Dict_Clans.get(index)]].empty != True:
await context.message.channel.send(df_players[df_players_clans.values == [Dict_Clans.get(index)]])
else:
await context.message.channel.send("Unfortunately, we don't have '" + index + "' in our Database.")
这行得通;例如如果用户键入“?members zt”,Bot 会输出一个 DataFrame,其中包含所有属于 ZT 部落的玩家。 问题是,它在 Discord 上看起来不太漂亮。 我希望将 DataFrame 作为 Discord Embed 输出,其标题是每个玩家的名称。 我在想最聪明的方法可能是 while 函数,但我似乎无法正确实现它。
提前感谢您的回答。
【问题讨论】: