Телеграм бот не заносит в базу данных новых пользователей
Вот код самого бота
import random
import telebot
from dbWorker import *
bot = telebot.TeleBot('<TOKEN>')
prepareDb('db/database.db')
def rand():
i = random.randint(1, 16)
return i
@bot.message_handler(commands=['start'])
def start(message):
init_user('db/database.db', message.from_user.first_name)
bot.send_message(message.chat.id, 'Приветик любители выпить! Что желаете выпить?')
bot.send_message(message.chat.id, 'Пиво - /drinkbeer \n'
'Вино - /drinkwine \n'
'Водка - /drinkvodka \n')
@bot.message_handler(commands=['drinkbeer'])
def drinkbeer(message):
user_name = message.from_user.first_name
currentLitres = getLitres('db/database.db', user_name, "beer")
r = rand()
s = currentLitres+r
bot.send_message(message.chat.id, f'<em>{user_name}, вы выпили - {r} л пива. </em>\n'
f'Всего вы выпили - {s} л пива', parse_mode='html')
setLitres('db/database.db', user_name, "beer", s)
@bot.message_handler(commands=['drinkwine'])
def drinkwine(message):
user_name = message.from_user.first_name
currentLitres = getLitres('db/database.db', user_name, "wine")
r = rand()
s = currentLitres + r
bot.send_message(message.chat.id, f'<em>{user_name}, вы выпили - {r} л вина. \n'
f'Всего вы выпили - {s} л вина </em>\n', parse_mode='html')
setLitres('db/database.db', user_name, "wine", s)
@bot.message_handler(commands=['drinkvodka'])
def drinkvodka(message):
user_name = message.from_user.first_name
currentLitres = getLitres('db/database.db', user_name, "vodka")
r = rand()
s = currentLitres + r
bot.send_message(message.chat.id, f'<em> {user_name}, вы выпили - {r} л водки. \n'
f'Всего вы выпили - {s} л водки </em>\n', parse_mode='html')
setLitres('db/database.db', user_name, "vodka", s)
bot.polling(none_stop=True)
Вот код файла
import sqlite3
from sqlite3 import Error
def init_conn(path):
conn = None
try:
conn = sqlite3.connect(path)
print ("Connection established!")
except Error as e:
print (e)
print ("Connection failed!")
return conn
def init_tables(connection):
sql = "CREATE TABLE IF NOT EXISTS users( id integer PRIMARY KEY, user_name text NOT NULL, beer real NOT NULL, wine real NOT NULL, vodka real NOT NULL);"
connection.execute(sql)
def prepareDb(name):
conn = init_conn(name)
init_tables(conn)
conn.close()
def init_user(db, name):
connection = init_conn(db)
cursor = connection.cursor()
users = cursor.fetchall()
usersAmount = len(users)
if usersAmount == 0:
sql = "INSERT INTO users(`user_name`, `beer`, `wine`, `vodka`) VALUES('{}', 0, 0, 0);".format(name)
cursor.execute(sql)
connection.commit()
connection.close()
else:
sql = "SELECT * FROM users WHERE `user_name`='" + name +"';"
connection.set_trace_callback(print)
cursor.execute(sql)
def setLitres(db, name, type, amount):
sql = "UPDATE users SET `{}`={} WHERE `user_name`='{}';".format(type, amount, name)
connection = init_conn(db)
cursor = connection.cursor()
cursor.execute(sql)
connection.commit()
connection.close()
def getLitres(db, name, type):
sql = "SELECT {} FROM users WHERE `user_name`='{}';".format(type, name)
connection = init_conn(db)
cursor = connection.cursor()
cursor.execute(sql)
items = cursor.fetchall()
litres = int(items[0][0])
connection.commit()
connection.close()
return litres
Вот такая ошибка выдает, если команду использует человек которого нет в базе данных. Почему не хочет заносить?
Источник: Stack Overflow на русском