Учусь писать ботов в телеге. Столкнулся с такой проблемой: нужно вытаскивать значение из сообщения боту в переменную.
Есть блок с регистрацией пользователей и есть блок с классическим эхо-ботом. Когда начинается регистрация, всё что идёт после декоратора умирает и работает эхо бот. Прикрепляю весь код, прошу не ругать и если не понятны какие то моменты поясню.
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)