#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 — это не база данных. В любом случае я настоятельно рекомендую вам использовать базу данных, если ваш бот довольно большой и у него много серверов.