@dreameddd

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

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

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

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

Похожие вопросы