Найти - Пользователи
Полная версия: Телеграмм бот, сохранение сообщения в переменную.
Начало » Python для новичков » Телеграмм бот, сохранение сообщения в переменную.
1
hlypik
Всем привет. Вопрос тривиальный абсолютно, но на который я не нахожу ответ в гугле.
Задача заключается в следующем: при вводе пользователем количества букв в слове необходимо записывать ответ в переменную, которая будет сохранять значение неограниченное количество сообщений в будущем(пока сам не перезапишу или не очищу). Пробовал банально записать в переменную, но при последующем получении сообщения переменная обнуляется. На просторах интернета все советуют использовать register_next_step_handler, но мне то необходимо не на одно вхождение значение запоминать, а до конца определенного периода вне зависимости от отправки сообщений пользователем. Еще видел, что можно привязаться к айди пользователя и в какое-то временное хранилище связанное по ключу записать и потом с помощью этого ключа вытаскивать значение. Но описано было абсолютно не понятно. Подскажите пожалуйста, куда копать. Питоном занялся совсем недавно, не бейте пж))

 import telebot
from telebot import types
import random
from StackWords import *
RealTimeWord = ''
SelectedNumber = 0
# Создаем экземпляр бота
bot = telebot.TeleBot('')
#def SaveNumber(Number):
#    global SelectedNumber = Number
def SendRules(m):
    bot.send_message(m.chat.id, 'Правила игры:, parse_mode='html')
# Функция, обрабатывающая команду /start
@bot.message_handler(commands=["start"])
def start(m, res=False):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    button1 = types.KeyboardButton("Начать игру")
    button2 = types.KeyboardButton("Правила")
    markup.add(button1, button2)
    bot.send_message(m.chat.id, 'Привет, это бот для игры в слова.\n', parse_mode='html', reply_markup=markup)
# Получение сообщений от юзера
@bot.message_handler(content_types=["text"])
def handle_text(message):
    if(message.text == "Начать игру"):
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        button1 = types.KeyboardButton("4 буквы")
        button2 = types.KeyboardButton("5 букв")
        button3 = types.KeyboardButton("6 букв")
        button4 = types.KeyboardButton("На главную")
        markup.add(button1, button2, button3, button4)
        bot.send_message(message.chat.id, 'Выберите количество букв в слове', reply_markup=markup)
    elif (message.text == "Правила"):
        SendRules(message)
    elif (message.text == "4 буквы"):
        #FourLettersTask(message, random.choice(FourLetters))
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        button1 = types.KeyboardButton("На главную")
        markup.add(button1)
        SelectedNumber = 4
        bot.send_message(message.chat.id, '????\nБуквы присутствуют:\nТестирование: ' + random.choice(FourLetters),  reply_markup=markup)
    elif (message.text == "5 букв"):
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        button1 = types.KeyboardButton("На главную")
        markup.add(button1)
        bot.send_message(message.chat.id, '?????\nБуквы присутствуют:\nТестирование: ' + random.choice(FiveLetters),  reply_markup=markup)
    elif (message.text == "6 букв"):
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        button1 = types.KeyboardButton("На главную")
        markup.add(button1)
        bot.send_message(message.chat.id, '??????\nБуквы присутствуют:\nТестирование: ' + random.choice(SixLetters),  reply_markup=markup)
    elif (message.text == "На главную"):
        start(message)
    else:
        if (len(message.text) == SelectedNumber):
            bot.send_message(message.chat.id, 'Правильно')
        else:
            bot.send_message(message.chat.id, 'Количество букв в вашем слове некорректное')
# Запускаем бота
bot.polling(none_stop=True, interval=0)
hlypik
Ну и еще нашел, что прикручивают sql сервер и там данные хранят, но это же жопа какая-то, мне же просто циферки запомнить, какая БД)))
ZerG
Любая переменная хранится только в цикле жизни твоего скрипта - если ты его остановил перезапустил и так далее
все значения обнулились.
Следовательно постоянные значения которые нужно запоминать нужно хранить снаружи и обращаться к ним из твоего скрипта
База данных это просто удобно паралельно гибко и так далее - ведь пользователей будет много и для каждого своя уникальная переменная
Либо можно хранить в файле что в итоге окажеться менее удобно особенно при паралельном чтении и записи

Так же у тебя пропущены SelectedNumber в блоках для 5 и 6 букв
hlypik
Спасибо за ответ, тогда буду копать базы данных. Про SelectedNumber спасибо. Я еще просто не дошел до этих вариантов, с 4-мя бы буквами завести, а там пойдёт)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB