import telebot
from telebot import types
from config import TOKEN
import sqlite3
import hashlib
bot = telebot.TeleBot(TOKEN)
def md5sum(value):
return hashlib.md5(value.encode()).hexdigest()
with sqlite3.connect("tg_database.db") as db:
cursor = db.cursor()
table = """CREATE TABLE IF NOT EXISTS users(
id INTEGER PRIMARY KEY,
name VARCHAR,
login VARCHAR,
password VARCHAR,
balance BIGINT DEFAULT 0
)
"""
cursor.executescript(table)
@bot.message_handler(commands=["start"])
def start(message):
if message.from_user.last_name == None:
message_text = f"Привет, {message.from_user.first_name}! Я помогу вам накопить на ваши мечты!\nДля начала создайте аккаунт или зарегистрируйтесь.\nСоздать аккаунт - /reg\nВойти в аккаунт - /log"
elif message.from_user.first_name == None:
message_text = f"Привет, {message.from_user.last_name}! Я помогу вам накопить на ваши мечты!\nДля начала создайте аккаунт или зарегистрируйтесь.\n Создать аккаунт - /reg\nВойти в аккаунт - /log"
else:
message_text = f"Привет, {message.from_user.first_name} {message.from_user.last_name}! Я помогу тебе накопить на ваши мечты!\nДля начала создайте аккаунт или зарегистрируйтесь.\nСоздать аккаунт - /reg\nВойти в аккаунт - /log"
bot.send_message(message.chat.id, message_text, parse_mode="html")
@bot.message_handler(commands=["reg"])
def get_name(message):
msg = bot.send_message(message.chat.id, "Как вас зовут?")
bot.register_next_step_handler(msg, get_login)
def get_login(message):
global name
name = message.text
msg = bot.send_message(message.chat.id, "Придумайте логин")
bot.register_next_step_handler(msg, get_password)
def get_password(message):
global login
login = message.text
msg = bot.send_message(message.chat.id, "Придумайте пароль")
bot.register_next_step_handler(msg, register)
def register(message):
global password
password = message.text
try:
db = sqlite3.connect("tg_database.db")
cursor = db.cursor()
db.create_function('md5', 1, md5sum)
cursor.execute("SELECT login FROM users WHERE login = ?", [login])
if cursor.fetchone() is None:
values = [name, login, password]
cursor.execute("INSERT INTO users(name, login, password) VALUES(?, ?, md5(?))", values)
db.commit()
bot.send_message(message.chat.id, "Вы успешно зарегистрированы! Теперь войдите в систему.")
else:
bot.send_message(message.chat.id, "Пользователь с таким логином уже существует! Зарегситрируйтесь заново.")
get_name(message)
except sqlite3.Error as e:
bot.send_message(message.chat.id, "Упс! Произошла ошибка!")
finally:
cursor.close()
db.close()
@bot.message_handler(commands=["log"])
def login(message):
msg = bot.send_message(message.chat.id, "Введите ваш логин")
bot.register_next_step_handler(msg, password)
def password(message):
global user_login
user_login = message.text
msg = bot.send_message(message.chat.id, "Введите пароль")
bot.register_next_step_handler(msg, log)
def log(message):
global user_password, isLog
user_password = message.text
isLog = None
try:
db = sqlite3.connect("tg_database.db")
cursor = db.cursor()
db.create_function('md5', 1, md5sum)
cursor.execute("SELECT login FROM users WHERE login = ?", [user_login])
if cursor.fetchone() is None:
bot.send_message(message.chat.id, "Такого пользователя не существует!")
isLog = False
elif cursor.execute("SELECT password FROM users WHERE login = ? AND password = md5(?)", [user_login, user_password]).fetchone() is None:
bot.send_message(message.chat.id, "Пароль неверный!")
isLog = False
else:
balance = cursor.execute("SELECT balance FROM users WHERE login = ?", [user_login]).fetchone()[0]
bot.send_message(message.chat.id, f"Успешный вход! Теперь вы можете пользоваться копилкой! Вот мои команды:\n/put - положить деньги\n/take - забрать деньги\n/balance - узнать баланс\n\nТвой баланс - {balance} руб.")
isLog = True
except sqlite3.Error as e:
bot.send_message(message.chat.id, "Упс! Произошла ошибка!")
finally:
cursor.close()
db.close()
@bot.message_handler(commands=["put"])
def how_put(message):
if isLog == True:
msg = bot.send_message(message.chat.id, "Сколько вы хотите положить?")
bot.register_next_step_handler(msg, put)
else:
bot.send_message(message.chat.id, "Вы еще не вошли в аккаунт!")
def put(message):
mon = message.text
if mon.isdigit() == False:
bot.send_message(message.chat.id, "Введите только число (без букв и символов)")
how_put(message)
else:
try:
db = sqlite3.connect("tg_database.db")
cursor = db.cursor()
balance = cursor.execute("SELECT balance FROM users WHERE login = ?", [user_login]).fetchone()[0]
cursor.execute("UPDATE users SET balance = balance + ? WHERE login = ?", [int(mon), user_login])
db.commit()
balance = cursor.execute("SELECT balance FROM users WHERE login = ?", [user_login]).fetchone()[0]
bot.send_message(message.chat.id, f"Баланс успешно пополнен!\nБаланс - {balance} руб.")
except sqlite3.Error as e:
bot.send_message(message.chat.id, "Упс! Произошла ошибка!")
finally:
cursor.close()
db.close()
@bot.message_handler(commands=["take"])
def how_take(message):
if isLog == True:
msg = bot.send_message(message.chat.id, "Сколько вы хотите забрать?")
bot.register_next_step_handler(msg, take)
def take(message):
money = message.text
if money.isdigit() == False:
bot.send_message(message.chat.id, "Введите только число (без букв и символов)")
how_take(message)
else:
try:
db = sqlite3.connect("tg_database.db")
cursor = db.cursor()
balance = cursor.execute("SELECT balance FROM users WHERE login = ?", [user_login]).fetchone()[0]
cursor.execute("UPDATE users SET balance = balance - ? WHERE login = ?", [int(money), user_login])
db.commit()
balance = cursor.execute("SELECT balance FROM users WHERE login = ?", [user_login]).fetchone()[0]
bot.send_message(message.chat.id, f"Вы успешно забрали {money} руб.\nБаланс - {balance} руб.")
except sqlite3.Error as e:
bot.send_message(message.chat.id, "Упс! Произошла ошибка!")
finally:
cursor.close()
db.close()
@bot.message_handler(commands=["balance"])
def show_balance(message):
try:
db = sqlite3.connect("tg_database.db")
cursor = db.cursor()
if isLog == True:
balance = cursor.execute("SELECT balance FROM users WHERE login = ?", [user_login]).fetchone()[0]
bot.send_message(message.chat.id, f"Ваш баланс - {balance} руб.")
else:
bot.send_message(message.chat.id, "Вы еще не вошли в аккаунт")
except sqlite3.Error as e:
bot.send_message(message.chat.id, "Упс! Произошла ошибка!")
finally:
cursor.close()
db.close()
bot.polling(none_stop=True)