【问题标题】:Discord.py server stats commandDiscord.py 服务器统计命令
【发布时间】:2021-05-18 18:34:06
【问题描述】:

我想做一个显示最有用的服务器统计信息的命令。我试着做这样的事情:

@bot.command()
async def serverstats(ctx):
    embed=discord.Embed(title=f"Statystyki serwera {ctx.guild.name}")
    embed.add_field(name="Users:", value=ctx.guild.members, inline=False)
    embed.add_field(name="Channels:", value=ctx.guild.channels, inline=False)
    embed.add_field(name="Messages sent:", value=???, inline=False)
    await ctx.send(embed=embed)

但我不知道如何使消息计数器,而其他计数器返回不正确或奇怪的数据

【问题讨论】:

  • 是的,但我该怎么做呢?
  • 我会从for channel in ctx.guild.channels: print(channel)开始。接下来我会尝试使用对象channels 来统计此频道中的消息。

标签: python discord discord.py


【解决方案1】:

对于用户和频道计数器,您可以使用len() 函数来计算有多少。如果您没有启用成员intent,也可以使用ctx.guild.member_count

# Using len()...
embed.add_field(name="Users:", value=ctx.guild.member_count, inline=False)
embed.add_field(name="Channels:", value=len(ctx.guild.channels), inline=False)

但是,对于消息,您需要使用数据库或全局变量,并在每次发送消息时手动增加条目。全局变量比数据库更易于使用,但是只要脚本结束或重新启动,它就会被刷新。

顺便说一句,如果你还是想使用数据库,我建议你查看dataset

# Using a global variable (dictionary)

# Somewhere in your code...
messagecounts = {}

...

@bot.event
async def on_message(message):
    if message.guild.id not in messagecounts.keys(): # Make sure there's already an entry... If not, add one!
        messagecounts[message.guild.id] = 0
    messagecounts[message.guild.id] += 1 # Sets the new count to 1 greater than the original.

然后,要检索此金额,您将添加字典条目。 最终代码:

# Somewhere above the command...
messagecounts = {}

@bot.command()
async def serverstats(ctx):
    embed=discord.Embed(title=f"Statystyki serwera {ctx.guild.name}")
    embed.add_field(name="Users:", value=ctx.guild.member_count, inline=False)
    embed.add_field(name="Channels:", value=len(ctx.guild.channels), inline=False)
    embed.add_field(name="Messages sent:", value=messagecounts[ctx.guild.id], inline=False)
    await ctx.send(embed=embed)

@bot.event
async def on_message(message):
    if message.guild.id not in messagecounts.keys():
        messagecounts[message.guild.id] = 0
    messagecounts[message.guild.id] += 1

【讨论】:

    【解决方案2】:

    对于用户,您可以尝试使用ctx.message.guild.member_count。我不确定频道和消息。

    【讨论】:

      猜你喜欢
      • 2018-09-18
      • 2021-07-26
      • 2021-04-09
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      • 2021-05-02
      • 2021-03-16
      • 1970-01-01
      相关资源
      最近更新 更多