Как сделать бот-дискордант, чтобы ежедневно проверять количество активных пользователей? - PullRequest
1 голос
/ 21 апреля 2020

Я создаю дискординарного бота и хочу знать, как добавить базовую c реализацию для наблюдения, какие пользователи ежедневно активны на сервере и как долго они активны. Определение активных не является точным, но это может быть, если они отправили сообщение в группе в течение дня. Каким будет код для реализации чего-то подобного в моем боте раздора? Большое спасибо!

1 Ответ

0 голосов
/ 21 апреля 2020

Проверка того, кто отправил сообщение, достаточно проста,

Вы могли бы использовать функцию on_message, чтобы узнать, кто отправил сообщение на вашем сервере, используя этот метод, вы можете получить пользователя и добавить его в список, а затем удалять его очень часто (например, ежедневно или подождать, пока администратор вызовет команду на сервере).

Положительной стороной этого метода является то, что вы можете контролировать то, что считается активным, например, вы также можете использовать on_reaction_add и его противоположность.

Это простой пример бота, который проверяет пользователей которые отправили сообщения на сервер и добавили их в список. Примечание. Этот сценарий не удаляет список. Это означает, что члены будут постоянно находиться в активном списке, вы сможете легко реализовать это в своем коде .

import discord

client = discord.Client()

activeMembers = [] #We create an empty list to hold the users that have been active

@client.event
async def on_message(message):
   if message.author not in activeMembers:  
      activeMembers.append(message.author)  

client.run("YOUR TOKEN HERE")

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

Проблема в том, что вы хотите увидеть как долго член активен на вашем сервере, так что вы могли бы регистрировать время, когда они отправляли сообщения, а затем вычислять время, когда они были активны на сервере, вычитая одно значение для другого. Как вы сказали, это не совсем точно, но, на мой взгляд, это лучшее решение. Самая большая проблема здесь заключается в том, что кто-то может отправить сообщение рано утром и затем go отключить информацию о своем дне, а затем отправить сообщение ночью, это будет означать, что бот будет считать, что он активен в течение многих часов (видя, как его первое сообщение было отправлено намного раньше) когда на самом деле их нет. Простой обходной путь - проверить время последнего сообщения каждого пользователя и использовать пороговое время (если хотите), чтобы узнать, кто больше не активен.

Например, если кто-то отправил свое последнее сообщение полчаса go, они больше не будут рассматриваться как активные, и их общее время будет рассчитываться на основе их первого сообщения и их последнего сообщения. Затем их данные будут удалены, поэтому, если они отправят сообщение намного позже, бот не будет использовать свое первое сообщение за день, чтобы подсчитать, сколько времени он провел.

Оглядываясь назад на это объяснение немного дрянное, поэтому я постараюсь быстро обобщить его в виде временной шкалы.

Пользователь отправляет сообщение в канал, и бот записывает его идентификатор и время, когда они его отправили -> Они отправьте другое сообщение через пять минут, бот записывает те же данные -> Пользователь не отправил сообщение в течение получаса (например, пороговое время, вы можете сократить или увеличить свое), и бот рассчитывает свое время и удаляет их время сообщения. Затем это время добавляется к их общему времени.

Это можно сделать с помощью .create_task(), когда вы передаете функцию для запуска в фоновом режиме. Функция, которую вы будете передавать, будет регулярно проверять, когда пользователи отправляли свое последнее сообщение.

Если вы хотите определить active как вещи, отличные от реакций или отправки сообщений, посетите discord.py , чтобы узнать разные вещи, которые вы можете сделать.

Удачи,

Бен

...