Top.Mail.Ru
Ответы

При запуске телеграм бота на python, он сразу останавливается.

Писал с помощью chatgpt, так как нужен бот, но не хочу платить, а программировать не умею
Нейронка не отвечает почему
Ещё ide пишет, что openpyxl не исспользуется.
Код прикрепляю в комент так как сюда не влезает

Дополнен

import telebot
import random
import openpyxl
from openpyxl import Workbook
from telebot import types

bot = telebot.TeleBot('токен скрыл')

# создаем словарь для хранения данных участников
participants_data = {}

# создаем Excel-файлы для хранения данных участников в каждом режиме и общую таблицу
solo_workbook = Workbook()
solo_worksheet = solo_workbook.active
solo_worksheet.title = "Участники Solo"
solo_worksheet.append(['Код', 'Фамилия Имя'])

sd_workbook = Workbook()
sd_worksheet = sd_workbook.active
sd_worksheet.title = "Участники ШД"
sd_worksheet.append(['Код', 'Фамилия Имя'])

gg_workbook = Workbook()
gg_worksheet = gg_workbook.active
gg_worksheet.title = "Участники Гем Граб"
gg_worksheet.append(['Код', 'Фамилия Имя'])

all_workbook = Workbook()
all_worksheet = all_workbook.active
all_worksheet.title = "Все участники"
all_worksheet.append(['Код', 'Фамилия Имя', 'Режим'])

# функция для генерации уникального кода
def generate_code():
code = ''.join(random.choices('0123456789ABCDEF', k=8))
while code in participants_data:
code = ''.join(random.choices('0123456789ABCDEF', k=8))
return code

def save_participant_data(message, mode):
name = message.text
code = generate_code()
participants_data[code] = {'name': name, 'mode': mode}

if mode == 'solo':
solo_worksheet.append([code, name])
elif mode == 'sd':
sd_worksheet.append([code, name])
elif mode == 'gg':
gg_worksheet.append([code, name])

all_worksheet.append([code, name, mode])

bot.send_message(message.chat.id, f"Ваш уникальный код: {code}")

if mode == 'solo':
solo_workbook.save("solo_participants.xlsx")
elif mode == 'sd':
sd_workbook.save("sd_participants.xlsx")
elif mode == 'gg':

Дополнен

gg_workbook.save("gg_participants.xlsx")

all_workbook.save("all_participants.xlsx")

# создаем меню бота
@bot.message_handler(commands=['start'])
def start_message(message):
markup = types.ReplyKeyboardMarkup(row_width=1)
itembtn1 = types.KeyboardButton('Зарегистрироваться в режиме Соло')
itembtn2 = types.KeyboardButton('Зарегистрироваться в режиме ШД')
itembtn3 = types.KeyboardButton('Зарегистрироваться в режиме Гем Граб')
markup.add(itembtn1, itembtn2, itembtn3)
bot.send_message(message.chat.id, 'Привет! Я бот для регистрации на баттлы в Бравл Старс.', reply_markup=markup)

# создаем обработчик нажатия на кнопку "Зарегистрироваться в режиме Соло"
@bot.message_handler(func=lambda message: message.text == 'Зарегистрироваться в режиме Соло')
def register_message_solo(message):
# запрашиваем у участника его имя и фамилию
bot.send_message(message.chat.id, 'Введите свою фамилию и имя через пробел')
bot.register_next_step_handler(message, save_participant_data, 'solo')

# создаем обработчик нажатия на кнопку "Зарегистрироваться в режиме ШД"
@bot.message_handler(func=lambda message: message.text == 'Зарегистрироваться в режиме ШД')
def register_message_sd(message):
# запрашиваем у участника его имя и фамилию
bot.send_message(message.chat.id, 'Введите свою фамилию и имя через пробел')
bot.register_next_step_handler(message, save_participant_data, 'sd')

# создаем обработчик нажатия на кнопку "Зарегистрироваться в режиме гем граб"
@bot.message_handler(func=lambda message: message.text == 'Зарегистрироваться в режиме Гем Граб')
def register_message_gg(message):
# запрашиваем у участника его имя и фамилию
bot.send_message(message.chat.id, 'Введите свою фамилию и имя через пробел')

Дополнен

bot.register_next_step_handler(message, save_participant_data, 'gg')

bot.polling()

По дате
По Рейтингу
Аватар пользователя
Мыслитель

Проблема может быть связана с тем, что после запуска бота нет ожидания ввода сообщений от пользователей, которые будут обрабатываться. Для решения этой проблемы можно использовать бесконечный цикл, который будет ожидать новых сообщений и передавать их обработчикам.

Попробуйте добавить следующий код в конец вашего скрипта:

while True:
try:
bot.polling(none_stop=True)
except Exception as e:
print(e)
time.sleep(15)
Этот код будет бесконечно запускать метод bot.polling() для получения новых сообщений от пользователей и передавать их обработчикам. Если при выполнении этого метода возникнет ошибка, программа будет ждать 15 секунд и продолжит работу.

Также убедитесь, что вы добавили токен вашего бота в строку bot = telebot.TeleBot('токен скрыл'). Вы должны заменить 'токен скрыл' на фактический токен вашего бота.

Аватар пользователя
Ученик

лучше просто в конец добавить bot.infinity_polling()

Аватар пользователя
Мыслитель

В дальнейшем при создании запроса в чат гпт указываей что ты вообще незнаешь програмирования и тогда он будет писать код полностью с нуля