Телеграм бот сразу же останавливается при запуске
import telebot # сама библиотека telebot
import time # необходим для cрока /mute и автоматического размута после срока мута
bot = telebot.TeleBot('Token') # в TOKEN мы вводим непосредственно сам полученный токен.
stats = {}
@bot.message_handler(commands=['start'])
def start(message):
bot.reply_to(message, "Привет! Я бот для управления чатом. Напиши /help, чтобы узнать, что я умею.")
@bot.message_handler(commands=['help'])
def help(message):
bot.reply_to(message,
"/kick - кикнуть пользователя\n/mute - замутить пользователя на определенное время\n/unmute - размутить пользователя\n/stats - показать статистику чата\n/selfstat - показать свою статистику")
@bot.message_handler(commands=['kick'])
def kick_user(message):
if message.reply_to_message:
chat_id = message.chat.id
user_id = message.reply_to_message.from_user.id
user_status = bot.get_chat_member(chat_id, user_id).status
if user_status == 'administrator' or user_status == 'creator':
bot.reply_to(message, "Невозможно кикнуть администратора.")
else:
bot.kick_chat_member(chat_id, user_id)
bot.reply_to(message, f"Пользователь {message.reply_to_message.from_user.username} был кикнут.")
else:
bot.reply_to(message,
"Эта команда должна быть использована в ответ на сообщение пользователя, которого вы хотите кикнуть.")
@bot.message_handler(commands=['mute'])
def mute_user(message):
if message.reply_to_message:
chat_id = message.chat.id
user_id = message.reply_to_message.from_user.id
user_status = bot.get_chat_member(chat_id, user_id).status
if user_status == 'administrator' or user_status == 'creator':
bot.reply_to(message, "Невозможно замутить администратора.")
else:
duration = 60 # Значение по умолчанию - 1 минута
args = message.text.split()[1:]
if args:
try:
duration = int(args[0])
except ValueError:
bot.reply_to(message, "Неправильный формат времени.")
return
if duration < 1:
bot.reply_to(message, "Время должно быть положительным числом.")
return
if duration > 1440:
bot.reply_to(message, "Максимальное время - 1 день.")
return
bot.restrict_chat_member(chat_id, user_id, until_date=time.time() + duration * 60)
bot.reply_to(message,
f"Пользователь {message.reply_to_message.from_user.username} замучен на {duration} минут.")
else:
bot.reply_to(message,
"Эта команда должна быть использована в ответ на сообщение пользователя, которого вы хотите замутить.")
@bot.message_handler(commands=['unmute'])
def unmute_user(message):
if message.reply_to_message:
chat_id = message.chat.id
user_id = message.reply_to_message.from_user.id
bot.restrict_chat_member(chat_id, user_id, can_send_messages=True,
can_send_media_messages=True, can_send_other_messages=True,
can_add_web_page_previews=True)
bot.reply_to(message,
f"Пользователь {message.reply_to_message.from_user.username} размучен.")
else:
bot.reply_to(message,
"Эта команда должна быть использована в ответ на сообщение пользователя, которого вы хотите размутить.")
@bot.message_handler(commands=['stats'])
def chat_stats(message):
chat_id = message.chat.id
if chat_id not in stats:
bot.reply_to(message, "Статистика чата пуста.")
else:
total_messages = stats[chat_id]['total_messages']
unique_users = len(stats[chat_id]['users'])
bot.reply_to(message,
f"Статистика чата:\nВсего сообщений: {total_messages}\nУникальных пользователей: {unique_users}")
@bot.message_handler(commands=['selfstat'])
def user_stats(message):
chat_id = message.chat.id
user_id = message.from_user.id
username = message.from_user.username
if chat_id not in stats:
bot.reply_to(message, "Статистика чата пуста.")
else:
if user_id not in stats[chat_id]['users']:
bot.reply_to(message, "Вы еще не отправляли сообщений в этом чате.")
else:
user_messages = stats[chat_id]['users'][user_id]['messages']
total_messages = stats[chat_id]['total_messages']
percentage = round(user_messages / total_messages * 100, 2)
bot.reply_to(message,
f"Статистика для пользователя @{username}:\nВсего сообщений: {user_messages}\nПроцент от общего количества сообщений: {percentage}%")
bad_words = ['анкета', 'ссылка', 'уникальное предложение']
def check_message(message):
for word in bad_words:
if word in message.text.lower():
return True
return False
@bot.message_handler(func=lambda message: True)
def handle_message(message):
# проверяем сообщение на наличие запрещенных слов
if check_message(message):
# если есть хотя бы одно запрещенное слово, кикаем пользователя
bot.kick_chat_member(message.chat.id, message.from_user.id)
bot.send_message(message.chat.id, f"Пользователь {message.from_user.username} был удален из чата за использование запрещенных слов")
else:
# если запрещенных слов нет, обрабатываем сообщение дальше
print(message.text)
bot.infinity_polling(none_stop=True)
Ответы (1 шт):
Автор решения: mrBars1k
→ Ссылка
У Вас строка с запуском цикла бота bot.infinity_polling(none_stop=True) (последняя строка кода) находится в функции и под условием else.
Уберите все отступы и бот запустится.