Задать вопрос
@imkyku

Ошибка в sqlite3 telebot?

Пишу бота для telegram на python с помощью библиотеки telebot.
Использую sqlite3 в качестве db. Возникла ошибка в 66 строчке (def perevod -> if balance)
import telebot
from telebot import types
import sqlite3

bot = telebot.TeleBot('secret_key_for_tg_bot')
bot.enable_save_next_step_handlers(delay=0)

db = sqlite3.connect('users.db', check_same_thread=False)
sql = db.cursor()
sql.execute("""CREATE TABLE IF NOT EXISTS users(
    chatid TEXT,
    username TEXT,
    balance INT
)""")  # создаем таблицу users с полями chatid, username, balance
db.commit()  # сохраняем базу данных

glav = types.KeyboardButton("↪ Главная")

mm = types.ReplyKeyboardMarkup(row_width=2, resize_keyboard=True)
button1 = types.KeyboardButton(" Информация")
button2 = types.KeyboardButton(" Операции")
mm.add(button1, button2)

deystv = types.ReplyKeyboardMarkup(row_width=2, resize_keyboard=True)
button3 = types.KeyboardButton(" Пополнение")
button4 = types.KeyboardButton(" Переводы")
deystv.add(button3, button4, glav)

popoln = types.ReplyKeyboardMarkup(row_width=2, resize_keyboard=True)
button5 = types.KeyboardButton(" Пополнение")
button6 = types.KeyboardButton(" Переводы")
popoln.add(button5, button6, glav)

perev = types.ReplyKeyboardMarkup(row_width=2, resize_keyboard=True)
button7 = types.KeyboardButton(" По DRZ-ID")
button8 = types.KeyboardButton(" На карту банка")
perev.add(button7, button8, glav)


# otvet = types.InlineKeyboardMarkup(row_width=2)
# button1 = types.InlineKeyboardButton(" Хорошо", callback_data='good')
# button2 = types.InlineKeyboardButton(" Плохо", callback_data='bad')
# otvet.add(button1,button2)


@bot.message_handler(commands=['start'])
def start(message):
    bot.send_message(message.chat.id, "DRZ BANK - Telegram", reply_markup=mm)
    sql.execute(f"SELECT chatid FROM users WHERE chatid = '{message.chat.id}'")
    if sql.fetchone() is None:
        sql.execute(f"INSERT INTO users VALUES(?,?,?)", (message.chat.id, message.from_user.username, 0))
        db.commit()


@bot.message_handler(content_types=['text'])
def backk(message):
    handler(message)


def perevod(message):
    balance = sql.execute(f"SELECT balance FROM users WHERE chatid = {message.chat.id}")
    def summa (message: int) -> int:
        msg = bot.send_message(message.chat.id, 'Введите сумму перевода:')
        bot.register_next_step_handler(msg, perevod)

    if balance >= summa(message) :
        def drzid (message: int) -> int:
            msg = bot.send_message(message.chat.id, 'Введите ID Получателя:')
            bot.register_next_step_handler(msg, perevod)

        sql.execute(f"UPDATE users SET balance = balance - drzsumper() WHERE chatid = {message.chat.id}")
        sql.execute(f"UPDATE users SET balance = balance + drzsumper() WHERE chatid = secas2(message)")
        bot.send_message(message.chat.id, "Перевод выполнен успешно!", reply_markup=mm)
        db.commit()
    else:
        bot.send_message(message.chat.id, "Недостаточно средств!", reply_markup=mm)


def handler(message):
    if message.text == " Информация":
        for value in sql.execute(f"SELECT balance FROM users WHERE chatid = {message.chat.id}"):
            bot.send_message(message.chat.id, f"Ваш баланс: {value[0]} DC",
                             parse_mode='html', reply_markup=mm)
        for value in sql.execute(f"SELECT chatid FROM users WHERE chatid = {message.chat.id}"):
            bot.send_message(message.chat.id, f"Ваш DRZ-ID: {value[0]}",
                             parse_mode='html', reply_markup=mm)

    if message.text == "↪ Главная":
        bot.send_message(message.chat.id, "DRZ BANK - Telegram", reply_markup=mm)
    if message.text == " Операции":
        bot.send_message(message.chat.id, "Доступные операции:", reply_markup=deystv)
    if message.text == " Переводы":
        bot.send_message(message.chat.id, "Доступные варианты:", reply_markup=perev)

    if message.text == " По DRZ-ID":
        perevod(message)

    if message.text == "xq2321dakh2311ndad92":
        sql.execute(f"UPDATE users SET balance = balance + 100 WHERE chatid = {message.chat.id}")
        db.commit()
        for value in sql.execute(f"SELECT balance FROM users WHERE chatid = {message.chat.id}"):
            bot.send_message(message.chat.id, f"Хорошо, я выдал тебе 100 рублей на баланс.\n\nТвой баланс: {value[0]}",
                             parse_mode='html')


bot.polling(none_stop=True)

import telebot
from telebot import types
import sqlite3

bot = telebot.TeleBot('6408261977:AAGg8wMLYi_FF18CYKRqf0wKd5YKXA1GqFo')
bot.enable_save_next_step_handlers(delay=0)

db = sqlite3.connect('users.db', check_same_thread=False)
sql = db.cursor()
sql.execute("""CREATE TABLE IF NOT EXISTS users(
chatid TEXT,
username TEXT,
balance INT
)""") # создаем таблицу users с полями chatid, username, balance
db.commit() # сохраняем базу данных

glav = types.KeyboardButton("↪ Главная")

mm = types.ReplyKeyboardMarkup(row_width=2, resize_keyboard=True)
button1 = types.KeyboardButton(" Информация")
button2 = types.KeyboardButton(" Операции")
mm.add(button1, button2)

deystv = types.ReplyKeyboardMarkup(row_width=2, resize_keyboard=True)
button3 = types.KeyboardButton(" Пополнение")
button4 = types.KeyboardButton(" Переводы")
deystv.add(button3, button4, glav)

popoln = types.ReplyKeyboardMarkup(row_width=2, resize_keyboard=True)
button5 = types.KeyboardButton(" Пополнение")
button6 = types.KeyboardButton(" Переводы")
popoln.add(button5, button6, glav)

perev = types.ReplyKeyboardMarkup(row_width=2, resize_keyboard=True)
button7 = types.KeyboardButton(" По DRZ-ID")
button8 = types.KeyboardButton(" На карту банка")
perev.add(button7, button8, glav)

# otvet = types.InlineKeyboardMarkup(row_width=2)
# button1 = types.InlineKeyboardButton(" Хорошо", callback_data='good')
# button2 = types.InlineKeyboardButton(" Плохо", callback_data='bad')
# otvet.add(button1,button2)

@bot.message_handler(commands=['start'])
def start(message):
bot.send_message(message.chat.id, "DRZ BANK - Telegram", reply_markup=mm)
sql.execute(f"SELECT chatid FROM users WHERE chatid = '{message.chat.id}'")
if sql.fetchone() is None:
sql.execute(f"INSERT INTO users VALUES(?,?,?)", (message.chat.id, message.from_user.username, 0))
db.commit()

@bot.message_handler(content_types=['text'])
def backk(message):
handler(message)

def perevod(message):
balance = sql.execute(f"SELECT balance FROM users WHERE chatid = {message.chat.id}")
def summa (message: int) -> int:
msg = bot.send_message(message.chat.id, 'Введите сумму перевода:')
bot.register_next_step_handler(msg, perevod)

if balance(int) >= summa(message) :
def drzid (message: int) -> int:
msg = bot.send_message(message.chat.id, 'Введите ID Получателя:')
bot.register_next_step_handler(msg, perevod)

sql.execute(f"UPDATE users SET balance = balance - drzsumper() WHERE chatid = {message.chat.id}")
sql.execute(f"UPDATE users SET balance = balance + drzsumper() WHERE chatid = secas2(message)")
bot.send_message(message.chat.id, "Перевод выполнен успешно!", reply_markup=mm)
db.commit()
else:
bot.send_message(message.chat.id, "Недостаточно средств!", reply_markup=mm)

def handler(message):
if message.text == " Информация":
for value in sql.execute(f"SELECT balance FROM users WHERE chatid = {message.chat.id}"):
bot.send_message(message.chat.id, f"Ваш баланс: {value[0]} DC",
parse_mode='html', reply_markup=mm)
for value in sql.execute(f"SELECT chatid FROM users WHERE chatid = {message.chat.id}"):
bot.send_message(message.chat.id, f"Ваш DRZ-ID: {value[0]}",
parse_mode='html', reply_markup=mm)

if message.text == "↪ Главная":
bot.send_message(message.chat.id, "DRZ BANK - Telegram", reply_markup=mm)
if message.text == " Операции":
bot.send_message(message.chat.id, "Доступные операции:", reply_markup=deystv)
if message.text == " Переводы":
bot.send_message(message.chat.id, "Доступные варианты:", reply_markup=perev)

if message.text == " По DRZ-ID":
perevod(message)

if message.text == "xq2321dakh2311ndad92":
sql.execute(f"UPDATE users SET balance = balance + 100 WHERE chatid = {message.chat.id}")
db.commit()
for value in sql.execute(f"SELECT balance FROM users WHERE chatid = {message.chat.id}"):
bot.send_message(message.chat.id, f"Хорошо, я выдал тебе 100 рублей на баланс.\n\nТвой баланс: {value[0]}",
parse_mode='html')

bot.polling(none_stop=True)
Выдает:
TypeError: '>=' not supported between instances of 'sqlite3.Cursor' and 'NoneType'


Как решить?
  • Вопрос задан
  • 88 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Выучить питон ДО того, как бросаться писать ботов, а не после.
def summa (message: int) -> int:
    msg = bot.send_message(message.chat.id, 'Введите сумму перевода:')
    bot.register_next_step_handler(msg, perevod)


Ты заявляешь, что функция возвращает int, и используешь её, как будто она возвращает int, но она ничего не возвращает - а раз так, она возвращает None.

Ну и да, читай примеры из документации, как правильно использовать register_next_step_handler().

sqlite тут вообще не при делах, но я замечу: не используй f-строки для формирования запросов. Вот, INSERT ты вроде правильно делаешь, так в чём проблема везде делать так же?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы