@Kerson

Телеграм бот отказывается работать (python)?

После запуска через CMD выдает следующее сообщение, при этом признаков жизни не подает:
main.py:68: TelegramDeprecationWarning: Old Handler API is deprecated - see https://git.io/fxJuV for details
updater = Updater(TOKEN, use_context=False)


Код:

config
TOKEN = '1164328268:AAH_XxrGnbeutPPKAyaxdwIO58xPg4EFIMA'  # токен бота
AGREEMENT_TEXT = "SOGLASHENIYE"

AGREE_BUTTON_TEXT = "Соглашаюсь"
GET_CARD_BUTTON = "Получить карточку"
AGREE_KEYBOARD = [[AGREE_BUTTON_TEXT]]
GET_CARD_KEYBOARD = [[GET_CARD_BUTTON]]

CAPTIONS = [
    "Биологическая характеристика",
    "Профессия",
    "Человеческие качества",
    "Состояние здоровья",
    "Хобби",
    "Доп. информация",
    "Фобия",
    "Багаж"
]

# 3 2 1 0

COUNT_DATA = [
    [10, 8, 9, 3],
    [18, 18, 15, 0],
    [11, 8, 9, 0],
    [6, 5, 7, 4],
    [10, 11, 9, 0],
    [8, 9, 7, 6],
    [10, 8, 10, 2],
    [6, 16, 8, 0]
]
DATA_STARTING_ROW = [2, 15, 35, 48, 57, 70, 81, 94]


db
import sqlite3
__connection = None


def get_connection():
    global __connection
    if __connection is None:
        __connection = sqlite3.connect('main.db', check_same_thread=False)
    return __connection


def create_table():
    conn = get_connection()
    crs = conn.cursor()
    crs.execute("CREATE TABLE IF NOT EXISTS data(id INTEGER NOT NULL, agree BOOLEAN NOT NULL)")
    conn.commit()


def reset_tables():
    conn = get_connection()
    crs = conn.cursor()
    crs.execute("DROP TABLE data")
    conn.commit()
    create_table()


def is_registred(user_id):
    conn = get_connection()
    crs = conn.cursor()
    crs.execute("SELECT COUNT(*) FROM data WHERE id = {0}".format(user_id))
    return crs.fetchall()[0][0] > 0


def register(user_id):
    conn = get_connection()
    crs = conn.cursor()
    crs.execute("INSERT INTO data(id, agree) VALUES({0}, 0)".format(user_id))
    conn.commit()


def is_agree(user_id):
    conn = get_connection()
    crs = conn.cursor()
    crs.execute("SELECT agree FROM data WHERE id = {0}".format(user_id))
    return crs.fetchall()[0][0]


def set_agree(user_id):
    conn = get_connection()
    crs = conn.cursor()
    crs.execute("UPDATE data SET agree = 1 WHERE id = {0}".format(user_id))
    conn.commit()


main

from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
from telegram import ReplyKeyboardMarkup
import telegram
from config import *
import db
import xlrd

workbook = xlrd.open_workbook('main.xlsx')
worksheet = workbook.sheet_by_name('Лист3')

db.get_connection()
db.create_table()


def numbers_with_sum(n, k):
    import random
    if n == 1:
        return [k]
    num = random.randint(0, min(3, k))
    return [num] + numbers_with_sum(n - 1, k - num)


def is_can_be(array):
    if len(array) != 8:
        return False
    for i in range(8):
        if COUNT_DATA[i][3 - array[i]] == 0:
            return False
    return True


def generate_card():
    ans = []
    while not is_can_be(ans):
        ans = numbers_with_sum(8, 10)
    card = "Вот ваша карточка: \n"
    import random
    for i in range(8):
        row = DATA_STARTING_ROW[i] + random.randint(0, COUNT_DATA[i][3 - ans[i]] - 1)
        text = str(worksheet.cell(row, 3 - ans[i])).split('\'')[1]
        text = text.replace("\\xa0", ' ')
        card += CAPTIONS[i] + ": " + text + "\n"
    return card


def start(update: telegram.update, context: telegram.ext.CallbackContext):
    user_id = context.message.chat.id
    if not db.is_registred(user_id):
        db.register(user_id)
    if db.is_agree(user_id):
        return
    bot.send_message(user_id, AGREEMENT_TEXT, reply_markup=ReplyKeyboardMarkup(AGREE_KEYBOARD, resize_keyboard=True))


def new_message(update: telegram.update, context: telegram.ext.CallbackContext):
    user_id = context.message.chat.id
    text = context.message.text
    if not db.is_agree(user_id):
        if text == AGREE_BUTTON_TEXT:
            db.set_agree(user_id)
            bot.send_message(user_id, "Успешно!\nТеперь вы можете получить карточку по нажатию кнопки снизу!",
                             reply_markup=ReplyKeyboardMarkup(GET_CARD_KEYBOARD, resize_keyboard=True))
        return
    if text == GET_CARD_BUTTON:
        bot.send_message(user_id, generate_card())


updater = Updater(TOKEN, use_context=False)
dp = updater.dispatcher
bot = updater.bot
dp.add_handler(CommandHandler("start", start))
dp.add_handler(MessageHandler(Filters.text, new_message))
updater.start_polling()
  • Вопрос задан
  • 745 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы