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

Почему возникает ошибка в боте написанном на Python?

Только в одной ситуации возникает ошибка.

Код
посмотреть код

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)



Ввод
6252dcd286cff489382109.jpeg

Ошибка
Traceback (most recent call last):
  File "C:\Users\1\Desktop\telegram_bots\money_bot\bot.py", line 199, in <module>
    bot.polling(none_stop=True)
  File "C:\Users\1\AppData\Local\Programs\Python\Python310\lib\site-packages\telebot\__init__.py", line 664, in polling
    self.__threaded_polling(non_stop, interval, timeout, long_polling_timeout, allowed_updates)
  File "C:\Users\1\AppData\Local\Programs\Python\Python310\lib\site-packages\telebot\__init__.py", line 726, in __threaded_polling
    raise e
  File "C:\Users\1\AppData\Local\Programs\Python\Python310\lib\site-packages\telebot\__init__.py", line 686, in __threaded_polling
    self.worker_pool.raise_exceptions()
  File "C:\Users\1\AppData\Local\Programs\Python\Python310\lib\site-packages\telebot\util.py", line 135, in raise_exceptions
    raise self.exception_info
  File "C:\Users\1\AppData\Local\Programs\Python\Python310\lib\site-packages\telebot\util.py", line 87, in run
    task(*args, **kwargs)
TypeError: 'str' object is not callable


Задавайте вопросы если нужно больше информации, заранее спасибо.
  • Вопрос задан
  • 92 просмотра
Подписаться 1 Простой 4 комментария
Пригласить эксперта
Ваш ответ на вопрос

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

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