Как добавить базу данных в игровой бот для телеграмма
Есть простой кликер бот для телеграм, как добавить базу данных sql. То есть так чтобы количество кликов и уровень прокачки сохранялось в базу данных за конкретным пользователем, а при выводе информации брало значения из базы данных.
import telebot
from telebot import types
import sqlite3
bot=telebot.TeleBot("1837738147:AAEHDWsu8raDyF1pkwqwwBAtbOPDXdt_pEE")
chet=0
dob=1
@bot.message_handler(commands=["start"])
def priv(message):
connect = sqlite3.connect('kliker.db')
cursor = connect.cursor()
cursor.execute("""CREATE TABLE IF NOT EXISTS login_id(
id INTEGER
)""")
connect.commit()
people_id=message.chat.id
cursor.execute(f"SELECT id FROM login_id WHERE id={people_id}")
user_id=[message.chat.id]
cursor.execute("INSERT INTO login_id VALUES(?);",user_id)
connect.commit()
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
item1 = types.KeyboardButton("кнопка?")
item2 = types.KeyboardButton("информацияℹ️")
item3 = types.KeyboardButton("прокачка?")
markup.add(item1,item2,item3)
bot.send_message(message.chat.id, 'добро пожаловать в мега кликер',reply_markup=markup)
@bot.message_handler(content_types=['text'])
def handler(message):
global chet
global dob
if message.text == "кнопка?":
chet+=dob
if message.text == "информацияℹ️":
bot.send_message(message.chat.id,"информация\nсчёт: {0}\nза клик: {1}".format(chet,dob))
if message.text == "прокачка?":
if chet>=10:
dob+=1
chet-=10
else:
bot.send_message(message.chat.id,"недостаточно кликов?")
if __name__=="__main__":
bot.infinity_polling()
Ответы (1 шт):
Автор решения: K_R_O_K_O_D_I_L_L_O
→ Ссылка
Это должно работать:
import telebot
from telebot import types
import sqlite3
bot = telebot.TeleBot("1734369637:AAFtguRVj0jNZuMewRQ8w-A8yD_uwjWilbo")
chet = {}
dob = {}
def get(conn):
cursor = conn.cursor()
cursor.execute("SELECT * from login_id")
result = cursor.fetchall()
return result
def insert(conn, id, score, ups):
cursor = conn.cursor()
cursor.execute("""CREATE TABLE IF NOT EXISTS login_id(
id INTEGER,
score INTEGER,
ups INTEGER
)""")
conn.commit()
user_id = [id, score, ups]
cursor.execute("INSERT INTO login_id VALUES(?,?,?);", user_id)
conn.commit()
@bot.message_handler(commands = ["start"])
def priv(message):
global chet
global dob
conn = sqlite3.connect('kliker.db')
try:
data = get(conn)
for user in data:
if message.chat.id in user:
data = list(user)
chet[data[0]] = data[1]
dob[data[0]] = data[2]
else:
chet[message.chat.id] = 0
dob[message.chat.id] = 1
id = message.chat.id
score = 0
ups = 1
insert(conn, id, score, ups)
markup = types.ReplyKeyboardMarkup(resize_keyboard = True)
item1 = types.KeyboardButton("кнопка?")
item2 = types.KeyboardButton("информацияℹ️")
item3 = types.KeyboardButton("прокачка?")
markup.add(item1, item2, item3)
bot.send_message(message.chat.id, 'добро пожаловать в мега кликер', reply_markup = markup)
except:
print("[info] table is not exists")
chet[message.chat.id] = 0
dob[message.chat.id] = 1
id = message.chat.id
score = 0
ups = 1
insert(conn, id, score, ups)
@bot.message_handler(commands = ["save"])
def save(message):
conn = sqlite3.connect('kliker.db')
insert(conn, message.chat.id, chet.get(message.chat.id), dob.get(message.chat.id))
@bot.message_handler(content_types = ['text'])
def handler(message):
global chet
global dob
print(chet, dob)
if message.text == "кнопка?":
chet[message.chat.id] = chet.get(message.chat.id) + dob.get(message.chat.id)
if message.text == "информацияℹ️":
bot.send_message(message.chat.id,
f"информация\nсчёт: {chet.get(message.chat.id)}\nза клик: {dob.get(message.chat.id)}")
if message.text == "прокачка?":
if chet.get(message.chat.id) >= 10:
dob[message.chat.id] = dob.get(message.chat.id) + 1
chet[message.chat.id] = chet.get(message.chat.id) - 10
else:
bot.send_message(message.chat.id, "недостаточно кликов?")
if __name__ == "__main__":
bot.infinity_polling()
Правда, после перезапуска бота надо писать /start, но думаю вам это поможет.