@GogoL_kie

Как получить текст в переменную из сообщения боту telegram на python?

Учусь писать ботов в телеге. Столкнулся с такой проблемой: нужно вытаскивать значение из сообщения боту в переменную.
Есть блок с регистрацией пользователей и есть блок с классическим эхо-ботом. Когда начинается регистрация, всё что идёт после декоратора умирает и работает эхо бот. Прикрепляю весь код, прошу не ругать и если не понятны какие то моменты поясню.
import telebot
import pyodbc

bot = telebot.TeleBot('ТОКЕН')

conn = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\Users\User\Desktop\Python3\TeleBot\WorkBitch_1\BotBase.accdb;')
cursor = conn.cursor()
cursor.execute('select * from TeleBot')

def ReadBaseLastKey():
    cursor.execute("SELECT key FROM TeleBot")
    rows = cursor.fetchall()
    for row in reversed(rows):
        #print(row.key)
        return row.key
        break
    conn.commit()

key = ReadBaseLastKey()

def WriteBase(key,login,password,user_id):
    user_id = str(user_id)
    key = str(key)
    cursor.execute("INSERT INTO TeleBot(key,login,password,tele_id) VALUES("+key+",'"+login+"','"+password+"','"+user_id+"')")
    conn.commit()

def ReadBaseUserId(user_id):                                                                                                            ##Возвращает True, если найден пользователь с введённым telegram_id. В остальных случаях None
    user_id = str(user_id)
    cursor.execute("SELECT key FROM TeleBot WHERE tele_id in ("+user_id+")")
    rows = cursor.fetchall()
    for row in rows:
        if row != '':
            return True
    conn.commit()

def ReadBaseKey(key):
    key = str(key)
    cursor.execute("SELECT key, login, password FROM TeleBot WHERE key in ("+key+")")
    rows = cursor.fetchall()
    for row in rows:
        print(row)
    conn.commit()

def ReadBaseLogin(login):
    cursor.execute("SELECT key, login, password FROM TeleBot WHERE login in ("+login+")")
    rows = cursor.fetchall()
    for row in rows:
        print(row)
    conn.commit()

def RegistUser():
    @bot.message_handler(content_types=['text'])
    def read_text(message):
        txt = message.text
##        print(txt)
        user_id = message.from_user.id
##        print(user_id)
        txt = txt.split('/')
        txt.append('')
        txt.append('')
        if txt[0] == '':
            bot.send_message(message.chat.id, '''Ошибка регистрации,
введите логин и пароль в формате
login/password''')
        elif txt[1] == '':
            bot.send_message(message.chat.id, '''Ошибка регистрации,
введите логин и пароль в формате
login/password''')
        else:
            global key
            key+=1
            WriteBase(key,txt[0],txt[1],user_id)
            bot.send_message(message.chat.id, '''Регистрация завершена''')


kboard_1 = telebot.types.ReplyKeyboardMarkup(True)
kboard_1.row("Привет","Пока")

@bot.message_handler(commands=['start'])

def start_message(message):
    bot.send_message(message.chat.id, 'Добро пожаловать. Начнём!', reply_markup = kboard_1)

@bot.message_handler(commands=['registration'])

def regist_message(message):
    user_id = message.from_user.id
##    print(user_id)
    if ReadBaseUserId(user_id) == True:
            bot.send_message(message.chat.id, '''Ошибка регистрации,
вы уже зарегестрированны''')
    else:
        bot.send_message(message.chat.id, '''Вы начали регистрацию''')
        bot.send_message(message.chat.id, '''Ввведите логин и пароль в формате:
login/password
                                        ''')
        RegistUser()

@bot.message_handler(commands=['help'])

def help_message(message):
    bot.send_message(message.chat.id, '''регистрация - /registration''')

@bot.message_handler(content_types=['text'])

def dialog_message(message):
    if message.text.lower() == 'привет':
        bot.send_message(message.chat.id, '''Здравствуй, введи /help для помощи''')
    elif message.text.lower() == 'пока':
        bot.send_message(message.chat.id, '''Пока, до скорой встречи''')
    else:
        bot.send_message(message.chat.id, '''Не понимаю, введи /help для помощи''')

bot.polling(none_stop = True, interval = 0)
  • Вопрос задан
  • 16763 просмотра
Пригласить эксперта
Ответы на вопрос 1
Danya_Violet
@Danya_Violet
CTO/CIO
сам текст сообщения можно вытащить из message.text, для передачи этого текста в другую функцию используйте bot.register_next_step_handler().
например этот код сначала запросит домен, после ФИО должность и номер телефона, и в итоге создаст корпоративный email с указанными параметрами

@bot.message_handler(commands=['emailcreate'])
def email_create_request_domain(message):
    if message.text.lower() == 'отмена':
        bot.send_message(message.from_user.id, 'На нетъ и суда нетъ')
        return
    send = bot.send_message(message.chat.id, 'Зьдати емейлъ\nПочтовый ящикъ:\n'
                                             'example.ru, example1.ru, example2.ru, example3.ru, example4.ru ')
    bot.register_next_step_handler(send, email_create_request_data)


def email_create_request_data(message):
    global domain_uis
    domain_uis = message.text.lower()
    if message.text.lower() == 'отмена':
        bot.send_message(message.from_user.id, 'На нетъ и суда нетъ')
        return
    send = bot.send_message(message.chat.id, 'Введите: ФИО должность нумеръ')
    bot.register_next_step_handler(send, email_create)


def email_create(message):
    first = message.text.split()[1]
    last = message.text.split()[0]
    middle = message.text.split()[2]
    phone = message.text.split()[4]
    position = message.text.split()[3]

    uis_login = create_nickname(first, last, middle, 'email_create')
    bot.send_message(message.chat.id, '✅ логинъ')

    uis_password = create_password()
    bot.send_message(message.chat.id, '✅ шифръ')

    id_yc = create_email(first, last, middle, phone, position, uis_password, uis_login, domain_uis)
    if 'Response' in str(id_yc):
        bot.send_message(message.chat.id, '❌ емейлъ' + '\n' + id_yc)
        return
    else:
        bot.send_message(message.chat.id, '✅ емейлъ')
        bot.send_message(message.chat.id, uis_login + '@' + domain_uis + '\n' + uis_password)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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