Как я могу получить количество сообщений, отправленных пользователем на сервере discord, и сохранить их в списке [Discord.py]

#python #list #discord #discord.py

Вопрос:

В настоящее время я использую этот код для проверки количества сообщений, отправленных пользователем, но этот подход очень медленный, для расчета для каждого пользователя требуется 1-2 минуты

 user = discord.utils.find(lambda m: m.id== j, channel.guild.members) async for message in channel.history(limit = 100000):  if message.author == user:  userMessages.append(message.content) print(len(userMessages))  

есть ли какой-либо другой быстрый подход к этому?

Ответ №1:

Подсчет сообщений

Вы можете использовать on_message событие для подсчета сообщений.

 message_count = {}  @client.event async def on_message(message):  global message_count  if message.guild.id not in message_count:  message_count[message.guild.id] = {}  try:  message_count[message.guild.id][message.author.id]  = 1  except KeyError:  message_count[message.guild.id][message.author.id] = 1  client.process_commands(message)   

А затем используйте

 member = something # specify member here try:  count = message_count[member.guild.id][member.id] except KeyError:  count = 0 # now `count` is count of messages from `member`  

Чтобы получить количество сообщений от участника.
Примечание: Количество сообщений сбрасывается при перезапуске бота, но это решение будет работать очень быстро.

База данных

Другой способ сделать то, что вы хотите, — использовать любую базу данных для хранения количества сообщений от разных участников.

Комментарии:

1. является ли хранение этих данных в json хорошим подходом?

2. Может быть, для маленьких ботов. Json — это не база данных. В любом случае я настоятельно рекомендую вам использовать базу данных, если ваш бот довольно большой и у него много серверов.