1

I deployed telegramm bot on a VPS server. After a while (i think a few hours) it gives error

ERROR - TeleBot: "Threaded polling exception: A request to the Telegram API was unsuccessful. Error code: 409. Description: Conflict: terminated by other getUpdates request; make sure that only one bot instance is running

But it was bot with token which i never used anywhere else before.(I created new bot right befor the deploy) And while it was running on server i didn't run it on my local machine. How it can be? What i can try to do?

I dont think bot code is matter in this case, but better to say that it's just about sending and handling text messages and photos.

import telebot
import os.path
from telebot import types
import gspread
from random import choice

def change_user_stage(call, value):
    if isinstance(call, types.Message):
        USER_ROW = worksheet.find(str(call.chat.id), in_column=3).row
        worksheet.update_acell('B{}'.format(USER_ROW), value)

    elif isinstance(call, types.CallbackQuery):
        USER_ROW = worksheet.find(str(call.message.chat.id), in_column=3).row
        worksheet.update_acell('B{}'.format(USER_ROW), value)

    else:
        print(0)

#func for fitback to false answer
negatives = ['не совсем', 'почти', 'неа', 'немного не так', 'близко', 'попробуй еще', 'немного не то', 'немного ошибся', 'неправильно']

def negative(call):
    if isinstance(call, types.Message):
        bot.send_message(call.chat.id, choice(negatives))

    elif isinstance(call, types.CallbackQuery):
        bot.send_message(call.message.chat.id, choice(negatives))


bot = telebot.TeleBot(******)

#get into google service account by credentials
gc = gspread.service_account(filename='credentials.json')
#find required sheet on our service account
sh = gc.open_by_key(******) #our sheet key from url
#get info from worksheet
worksheet = sh.get_worksheet(0)

#hold photo open
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
PHOTO1 = os.path.join(BASE_DIR, 'TheTower.jpeg')


@bot.message_handler(commands=['start'])
def start(message):

    bot.send_message(message.chat.id, "Привет! Ты запустил наш квест - значит определенно принял верное решение "
                                      "ведь по прохождению квеста ты побольше узнаешь о столице солнечного Башкортостана и получишь нашу сувенирную продукцию, "
                                      " а также приятные подарки от наших партнеров ( а они у нас, кстати, очень крутые!)\n\n"
                                      "Перед началом ответь пожалуйста на несколько вопросов. Это очень важно для нас!\n"
                                      "Тем самым ты даешь согласие на обработку своих персональных данных (все данные останутся строго конфиденциальными)")

    bot.send_message(message.chat.id, 'Напиши свое ФИО')

    if worksheet.find(str(message.chat.id), in_column=3) is None:
        #add user id to worksheet in correct place
        TOTAL_USERS = int(worksheet.get('A2')[0][0])
        worksheet.update_acell('C{}'.format(2 + TOTAL_USERS), message.chat.id)
        worksheet.update_acell('A2', TOTAL_USERS + 1)

    bot.register_next_step_handler(message, second_question)

def second_question(message):
    bot.send_message(message.chat.id, "Сколько тебе лет?")
    bot.register_next_step_handler(message, third_question)
    USER_ROW = worksheet.find(str(message.chat.id), in_column=3).row
    #updating google sheet q1
    worksheet.update_acell('D{}'.format(USER_ROW), message.from_user.username)
    worksheet.update_acell('E{}'.format(USER_ROW), message.from_user.first_name)
    worksheet.update_acell('F{}'.format(USER_ROW), message.text)

def third_question(message):
    bot.send_message(message.chat.id, "Укажи свою почту (никаких рассылок и спама!)")
    bot.register_next_step_handler(message, after_question)
    #updating google shell q2
    USER_ROW = worksheet.find(str(message.chat.id), in_column=3).row
    worksheet.update_acell('G{}'.format(USER_ROW), message.text)

def after_question(message):
    markup = types.InlineKeyboardMarkup()
    button = types.InlineKeyboardButton(text='В путь', callback_data='start')
    markup.add(button)

    bot.send_message(message.chat.id, 'Спасибо!\nА теперь давай начнем квест!', reply_markup=markup)
    #updating google shell q3
    USER_ROW = worksheet.find(str(message.chat.id), in_column=3).row
    worksheet.update_acell('H{}'.format(USER_ROW), message.text)

@bot.callback_query_handler(func=lambda call: call.data == "start")
def start(call):
     bot.answer_callback_query(callback_query_id=call.id)

     bot.send_message(call.message.chat.id, "-Ну что, где встречаемся?\n -<b>На ГД!</b>\n\n"
                                            "Наверное, ты поражен нашей оригинальностью, но место встречи изменить нельзя!", parse_mode='html' )
     bot.send_message(call.message.chat.id, "Ты знал, что Гостиный двор хранит в себе страшные тайны??\n\n"
                                            "В торговых рядах в 90-х видели призрака старого купца \n\n"
                                            "Один из рабочих рассказал, что странная фигура замахивалась кнутом на людей."
                                            "Позже призрака увидел и охранник вовремя ночного обхода. Старый купец поднимался по лестнице, но исчез, как только его стали искать!\n\n "
                                            "Мы думаем, что именно по этой причине Гостинка закрывается до наступления темноты...\n"
                                            "Будьте осторожны!\n\n"
                                            "Предлагаем попробовать запечатлеть призрака на фотографии\n "
                                            "Кидай сюда свой результат и получай координаты следующей точки!")

     #updating user stage
     change_user_stage(call, 1)



@bot.callback_query_handler(func=lambda call: call.data == 'IAmHere')
def tasks(call):
   bot.answer_callback_query(callback_query_id=call.id)

   bot.send_message(call.message.chat.id, "Прогуляйся по саду, посиди в беседке, пройдись по висячему мосту"
                                          " и внимательно осмотрись по сторонам \n\n"
                                          "Чтобы получить следующую точку, напиши нам количество оленей в парке (неживых!!) ")


   #updating user stage
   change_user_stage(call, 2)

@bot.callback_query_handler(func=lambda call: call.data == 'Habirov')
def history_check(call):
    bot.answer_callback_query(callback_query_id=call.id)

    bot.send_message(call.message.chat.id, 'Проверим твои знания об истории Уфы, чтобы получить следующую точку?\n\n'
                                           'Напиши, в каком году было построено здание Администрации Главы РБ')



@bot.callback_query_handler(func=lambda call: call.data == 'NearTheTower')
def tower(call):
    bot.answer_callback_query(callback_query_id=call.id)

    photo = open(PHOTO1, 'rb')
    bot.send_photo(call.message.chat.id, photo)
    photo.close()
    bot.send_message(call.message.chat.id, 'Фух, наконец-то ты тут!\n\n'
                                           'В прошлом это была водонапорная башня, которая в 1957 превратилась в обсерваторию для студентов БашГУ.\n\n'
                                           'Сейчас же башня является объектом культурного наследия и локальным местом Уфимской молодежи,'
                                           ' откуда открывается красивый вид на закаты у реки Белой\n\n'
                                           'Чтобы получить следующую точку, попробуй воспроизвести старую фотографию башни и отправь ее нам!⬇️')

    #updating user stage
    change_user_stage(call, '4')

@bot.callback_query_handler(func=lambda call: call.data == 'CatMeeted')
def cat_name(call):
    bot.answer_callback_query(callback_query_id=call.id)
    bot.send_message(call.message.chat.id, 'Раз ты уже пришел в гости к коту, то пора познакомиться и узнать, как его зовут.\n'
                                      'Это и будет твоим ключом к получению следующей точки!')

    #updating user stage
    change_user_stage(call, 6)

@bot.callback_query_handler(func=lambda call: call.data == 'IAmIn')
def cypher(call):
    bot.answer_callback_query(callback_query_id=call.id)

    markup = types.InlineKeyboardMarkup()
    button = types.InlineKeyboardButton(text='Мне нужна подсказка', callback_data='NeedHelp')
    markup.add(button)

    bot.send_message(call.message.chat.id, 'Ой, ты уже почти прошел весь маршрут\n'
                                      'Так держать!\n\n '
                                      'Чтобы получить следующую локацию, попробуй узнать, как переводится слово Заман. '
                                      'Для этого необходимо разгадать небольшой шифр: \n\n'
                                      '<B>31-17-16-23-1</b>\n\n'
                                      'Если разгадал, то скорее пиши ответ!', parse_mode='html', reply_markup=markup)

    #updating user stage
    change_user_stage(call, 7)

@bot.callback_query_handler(func=lambda call: call.data == 'NeedHelp')
def need_help(call):
    bot.answer_callback_query(callback_query_id=call.id)
    bot.send_message(call.message.chat.id, 'Данный шифр называется A1Z26')

@bot.callback_query_handler(func=lambda call: call.data == 'IAmHere2')
def black_squares(call):
    bot.answer_callback_query(callback_query_id=call.id)

    markup = types.InlineKeyboardMarkup()
    button = types.InlineKeyboardButton(text='Что такое квадратики?', callback_data='WhatIsSquares')
    markup.add(button)

    bot.send_message(call.message.chat.id, 'Авторами панно, создаваемого в 1973 году, являются Александр Пантелеев и Александр Юдин.'
                                           ' На композиции изображено солнце, радуга и счастливые люди в белых халатах☀️\n\n'
                                           'Мрамор и яшму для мозаики добывали на Урале,'
                                           ' а вот пластинки из непрозрачного стекла привезли из Москвы.\n\n'
                                           'Чтобы отправиться дальше, напиши, сколько черных квадратиков изображено на панно?◾️', reply_markup=markup)
    change_user_stage(call, 8)


@bot.callback_query_handler(func=lambda call: call.data == 'WhatIsSquares')
def squares_explanetion(call):
    bot.answer_callback_query(callback_query_id=call.id)
    bot.send_message(call.message.chat.id, 'Обрати внимание на пол, на котором стоят люди, изображенные на мозаике!')

@bot.callback_query_handler(func=lambda call: call.data == 'LastPoint')
def last_point(call):
    bot.answer_callback_query(callback_query_id=call.id)

    bot.send_message(call.message.chat.id, 'Поздравляем, ты прошел весь квест и узнал Уфу чуточку лучше! \n\n'
                                           'Спасибо, что провел это время с нами! '
                                           'Наша команда очень старалась Поэтому мы надеемся, что тебе понравилось,'
                                           ' и ты открыл для себя новые классные места!\n\n'
                                           'Чтобы получить сувенирную продукцию и купоны от наших партнеров,'
                                           ' покажи баристе пройденный квест и скажи кодовое слово «Айда по Уфе»\n\n'
                                           'Мы будем безумно благодарны, если ты расскажешь о нас своим друзьям и оставишь обратную связь,'
                                           ' ведь это сильно поможет нам развиваться дальше!\n\n'
                                           'Ссылочка на обратную связь ⬇️'
                                           'До новых встреч!')


#------------------------------------------handle photos and check it for STAGE----------------------------------------
@bot.message_handler(content_types=['photo'])
def photo_answering(message):
    #chek user's stage
    USER_ROW = worksheet.find(str(message.chat.id), in_column=3).row
    USER_STAGE = worksheet.cell(USER_ROW, 2).value

    if USER_STAGE == '1':
        markup = types.InlineKeyboardMarkup()
        button = types.InlineKeyboardButton(text='Я тут', callback_data='IAmHere')
        markup.add(button)

        bot.send_message(message.chat.id, "Крутая фотка!"
                                          "Уверены, призраки тебя больше не потревожат\n\n"
                                          "Отправляйся в сад им. Салавата Юлаева через Софьюшкину аллею.\n\n"
                                          "Кстати, интересный факт!\n\n"
                                          "Изначально аллея была названа Софийским или Театральным садом."
                                          " Только после смерти Софьи Александровны (жены Г.С. Аксакова) жители города переименовали ее в Софьюшкину."
                                          " Единственную в Уфе аллею классического типа\n\n "
                                          "Если ты уже дошел до сада, то скорее жми на кнопку⬇️", parse_mode='html', reply_markup=markup)

    elif USER_STAGE == '4':
        bot.send_message(message.chat.id, 'Вау! А ты мастер фотографий!'
                                          'Теперь получай следующую локацию⬇️\n\n'
                                          '«У лукоморья дуб зелёный; Златая цепь на дубе том: И днём и ночью кот учёный Всё ходит по цепи кругом»\n\n'
                                          'Знакомое стихотворение?\n'
                                          'Вспомни фамилию автора этого произведения и отправляйся на улицу, названную в его честь!\n\n'
                                          'Поговаривают, что там находится загадочный сквер с русалкой на ветвях'
                                          'Найди ее и пришли нам доказательства!\n\n'
                                          'P.S. - ищи сквер в перекрёстке между улицами Гафури и Аксакова')

        change_user_stage(message, 5)

    elif USER_STAGE == '5':
        markup = types.InlineKeyboardMarkup()
        button = types.InlineKeyboardButton(text='Я встретился с котом', callback_data='CatMeeted')
        markup.add(button)

        bot.send_message(message.chat.id, 'Русалку нашел, погнали дальше!\n\n'
                                          'Предлагаем тебе зайти в гости к коту и присмотреть для себя классные вещички\n\n'
                                          'Отправляйся в секонд-хенд «Кот и Шмот» на ул. Коммунистическую 45/3\n\n'
                                          'Для наших участников действует скидка -35% на любую вещь '
                                          'Просто покажи на экране прохождение квеста и скажи кодовое слово «Айда по Уфе»!\n\n'
                                          'Кстати, по пути мы советуем заглянуть в музей им. Нестерова и погрузиться с головой в искусство.\n '
                                          'Но не забудь свериться с графиком их работы!', reply_markup=markup)
        change_user_stage(message, 5.5)

    else:
        print('фото на некоректной стадии')


#-----------------------------handle every text messsage and check it for stage or question answer--------------------------------
@bot.message_handler(content_types=['text'])
def text_answering(message):
    #get user stage
    USER_ROW = worksheet.find(str(message.chat.id), in_column=3).row
    USER_STAGE = worksheet.cell(USER_ROW, 2).value

    if USER_STAGE == '2':
        if message.text == '2':

            markup = types.InlineKeyboardMarkup()
            button = types.InlineKeyboardButton(text='Дошел до дома, встретил Хабирова!', callback_data='Habirov')
            markup.add(button)

            bot.send_message(message.chat.id, 'А ты хорош в математике\n\n'
                                              'Пора осмотреть красоты нашего города на обзорной площадке перед Домом республики\n\n'
                                              'Отправляйся на ул. Тукаева 46!  ',
                                              reply_markup=markup)

            change_user_stage(message, 3)
        else:
            negative(message)

    elif USER_STAGE == '7':
        if message.text.lower() == 'эпоха':
            bot.send_message(message.chat.id, 'ZAMAN = Эпоха\n\n'
                                              '«Настала эпоха, которая может переломить утрату памяти, собственной истории и забвения.'
                                              ' ZAMAN возрождает интерес людей к самим себе,'
                                              ' к своей истории и побуждает задуматься, что будет завтра»')

            change_user_stage(message, 7.5)

            markup = types.InlineKeyboardMarkup()
            button = types.InlineKeyboardButton(text='Я тут!', callback_data='IAmHere2')
            markup.add(button)

            bot.send_message(message.chat.id, 'Ну что, отправляемся дальше?\n\n'
                                              'В свое время Советскому Союзу ещё было что сказать и миру, и собственным гражданам.'
                                              ' Поэтому на домах города расположились интересные разноцветные мозаики\n\n'
                                              'Приглашаем тебя взглянуть на одну из тех, что находится в самом центре города!\n\n '
                                              'Отправляйся на ул. Кирова 15 к Академии наук! ', reply_markup=markup)

        else:
            negative(message)

    elif  USER_STAGE == '6':
        if message.text.lower() == 'ламба':

            markup = types.InlineKeyboardMarkup()
            button = types.InlineKeyboardButton(text='Я погрузился в искусство', callback_data='IAmIn')
            markup.add(button)

            bot.send_message(message.chat.id,
                             'Предлагаем ознакомиться с современным искусством, расположенным в музее ZAMAN на ул. Мустая Карима 6.\n\n'
                             '«ZAMAN переосмысляет и преобразует локальную культуру, делая ее живой и своевременной.\n\n'
                             'На втором этаже здания находится классный книжный магазин, где ты можешь найти не только книги,'
                             ' но и открытки с Уфой, а также стикеры от башкирских художников', reply_markup=markup)

            change_user_stage(message, 6.5)

        else:
            negative(message)

    elif USER_STAGE == '3':
        if message.text == '1979':

            markup = types.InlineKeyboardMarkup()
            button = types.InlineKeyboardButton(text='Я дошел до башни!', callback_data='NearTheTower')
            markup.add(button)

            bot.send_message(message.chat.id, 'Молодец!\n\n'
                                              'Отправляем тебя на заброшку '
                                              '(не переживай, все в рамках закона!)\n\n'
                                              'Иди на ул. Алтайская 4 и ориентируйся на кирпичную башню вдалеке. ', reply_markup=markup)

            change_user_stage(message, 3.5)

        else:
            negative(message)

    elif USER_STAGE == '8':
        if message.text == '15':

            markup = types.InlineKeyboardMarkup()
            button = types.InlineKeyboardButton(text='Ура! Я дошел до последней точки!', callback_data='LastPoint')
            markup.add(button)

            bot.send_message(message.chat.id, 'Фух, ты наконец на финишной прямой! \n\n'
                                              'Беги в кофейню Union на ул. Ленина 44/46 и забирай свои заслуженные подарки!'
                                              , reply_markup=markup)

            change_user_stage(message, 8.5)

        else:
            negative(message)

    else:
        print('некоректный текст:'+ message.text)


bot.polling()```

Tried to change bot token

CallMeStag
  • 5,467
  • 1
  • 7
  • 22

0 Answers0