@dreameddd

Можно ли сделать как-нибудь проще достижения в боте?

У меня есть выдача достижений через базу данных. Если я хочу добавить какое-то достижение, то пишу в конце команды код, который проверяет: если достижение "Название" нету в списке достижений у пользователя (из бд), то добавляем и отправляем сообщение о том, что достижение получено, если же достижение уже есть - то сообщения об этом нету, но это просто пустой код, который убирает оптимизацию. И так к каждой команде или сообщениям (допустим достижение за 10, 100, 1000 сообщений через on_message, т.е. бот при каждом новом сообщении пользователя проверяет, есть ли у него достижение или нет. Так вот, как можно поместить допустим все достижения в одном файле и выдавать их за определенные действия? Или сделать как-нибудь проще? (Знаю, что вопрос может быть не понятен)
  • Вопрос задан
  • 137 просмотров
Решения вопроса 1
@Vindicar
Подумай, что требуется для описания достижения:
1. Событие, которое вызвает его получение (сообщение, реакция, заход на канал, и т.д.)
2. Программный код, который получает данные о событии и обновляет состояние достижения (например, увеличивает счётчик сообщений). Он может сообщить, получено ли пользователем какое-то достижение вместе с этим событием.
3. База, где хранится информация о достижениях того или иного пользователя. В простейшем случае она будет иметь вид "пользователь-показатель-счётчик", т.е. например "вася - сообщения - 254". Код из п.2 будет читать этот показатель, увеличивать его, и если достигнуто желаемое значение, то выдавать сообщение. Для простоты можно хранить сообщения в отдельной таблице вида "показатель-порог-сообщение", тогда если показатель равен тому или иному порогу, бот должен послать соответствующее сообщение.

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы