не работают некоторые четко прописаные функции в телеграм боте

О проекте:

telegram бот, админ для группы

функции:

  • анти спам
  • репорт
  • отправка сообщений по времени
  • приветствие и прощание

проблема:

Не работает команда report, как и отправка сообщений в чат по времени и анти-спам тоже. Что удивило, репорт просто перестал работать после добавления анти-спама

import telebot
from collections import defaultdict
import time
import psutil
import schedule
import datetime
import os
import requests
from datetime import datetime

token=':)'

help_user='/report забань дибила в чяте\n'

message = 'тут будет текст'

bot=telebot.TeleBot(token)

def ping():
    start_time = time.time()
    k=requests.get('https://yandex.ru')
    k.status_code
    response=time.time() - start_time
    print('ping',response)
    return response





def monitor_resources():
    # Получаем использование CPU, RAM, дискового пространства
    print('manitor')
    cpu_percent = psutil.cpu_percent()
    ram_percent = psutil.virtual_memory().percent
    disk_percent = psutil.disk_usage('/').percent
    # Выводим информацию в консоль или в лог-файл
    print(f"CPU: {cpu_percent}%")
    print(f"RAM: {ram_percent}%")
    print(f"Disk: {disk_percent}%")
    return cpu_percent,ram_percent,disk_percent

#@bot.message_handler(content_types='text')
#def message_reply(message):
#    print('log')
#    print('id:',message.from_user.id)
#    print('username:',message.from_user.username)
#    print(message.from_user.first_name)
#    print(message.text)



@bot.message_handler(commands=['help'])
def message_handler(message):
     bot.send_message(message.chat.id,help_user)
@bot.message_handler(commands=['manitor'])
def message_handler(message):
      cpu_percent,ram_percent,disk_percent=monitor_resources()
      bot.send_message(message.chat.id,f"CPU: {cpu_percent}%")
      bot.send_message(message.chat.id,f"RAM: {ram_percent}%")
      bot.send_message(message.chat.id,f"Disk: {disk_percent}%")
      bot.send_message(message.chat.id,f"ping: {ping()}")
      
@bot.message_handler(commands=['time_server'])
def message_handler(message):
     now = datetime.now() 
     time = now.strftime("%H:%M")
     bot.send_message(message.chat.id,time)



last_time = {}
@bot.message_handler(content_types=['text'])
def message_handler(message):                                  
    if message.chat.id not in last_time:
        last_time[message.chat.id] = time.time()
    else:
        if (time.time() - last_time[message.chat.id]) * 1000 < 500:
            return 0
        last_time[message.chat.id] = time.time()
report_data = defaultdict(lambda: {'message_id': None, 'responses': set()})
@bot.message_handler(content_types=['text'])
def handle_message(message):
    count = {}
    check_string = message.text
    total_chars = len(check_string)
    
    for s in check_string:
        count[s] = count.get(s, 0) + 1
    for char, occurrences in count.items():
        if occurrences > 1:
            percentage = (occurrences / total_chars) * 100
            if percentage >= 30: 
                bot.reply_to(message, 'Обнаружен спам')
                report_data = defaultdict(lambda: {'message_id': None, 'responses': set()})
    if total_chars > 500: 
        bot.reply_to(message, 'Обнаружен спам: слишком длинное сообщение')
        report_data = defaultdict(lambda: {'message_id': None, 'responses': set()})


# Словарь для хранения данных о репортах
report_data = defaultdict(lambda: {'message_id': None, 'responses': set()})

@bot.message_handler(commands=['report'])
def handle_report(message):
    # Сохраняем сообщение, на которое будет отправлен ответ
    bot.reply_to(message, "репорт отправлен")
    report_data[message.chat.id]['message_id'] = message.message_id
    report_data[message.chat.id]['responses'].clear()  # Очищаем предыдущие ответы
    bot.reply_to(message, "Пожалуйста, ответьте на сообщение, чтобы сообщить о нарушении.")

@bot.message_handler(func=lambda message: message.reply_to_message and message.reply_to_message.message_id == report_data[message.chat.id]['message_id'])
def handle_response(message):
    report = report_data[message.chat.id]
    # Добавляем пользователя, ответившего на сообщение
    report['responses'].add(message.from_user.id)
    # Проверяем, ответили ли 5 уникальных пользователей
    if len(report['responses']) >= 1:  # Измените на 5, если нужно
        user_to_ban = message.reply_to_message.from_user.id
        # Ограничиваем пользователя на 24 часа
        bot.restrict_chat_member(message.chat.id, user_to_ban, until_date=int(time.time()) + 86400)
        bot.send_message(message.chat.id, f"Пользователь {user_to_ban} получил мут на 24 часа за нарушение.")
        # Записываем информацию о нарушении в файл
        with open('нарушители.txt', 'a', encoding='utf-8') as f:
            data = f"{datetime.now()} - Пользователь {user_to_ban} - reportn"
            f.write(data)
        # Удаляем данные о репорте
        del report_data[message.chat.id]

def add():
    # Задаем время отправки сообщения
    now = datetime.now() 
    current_time = now.strftime("%H:%M")
    #Запускаем цикл для проверки времени
    if current_time == '12:00':#Выставляете ваше время
        bot.send_message(chat_id=message.chat.id, text=message)
    elif current_time == '14:00':
         bot.send_message(chat_id=message.chat.id, text=message)
    elif current_time == '16:00':
         bot.send_message(chat_id=message.chat.id, text=message)
    elif current_time == '18:00':
         bot.send_message(chat_id=message.chat.id, text=message)
    elif current_time == '20:00':
         bot.send_message(chat_id=message.chat.id, text=message)
    elif current_time == '22:00':
         bot.send_message(chat_id=message.chat.id, text=message)
    elif current_time == '08:00':
         bot.send_message(chat_id=message.chat.id, text=message)
    elif current_time == '06:00':
        bot.send_message(chat_id=message.chat.id, text=message)
    elif current_time == '21:28':
         bot.send_message(chat_id=message.chat.id, text=message)


@bot.message_handler(content_types= ['new_chat_members'])
def greeting(message):
    bot.reply_to(message, 'приветствую')
@bot.message_handler(content_types= ['left_chat_member'])
def greeting(message):
    bot.reply_to(message, 'пака :(')


@bot.message_handler(content_types=['text'])
def response(message):
    get_message_bot = message.text.strip().lower()
#print(message.from_user.first_name)
#print(message.from_user.last_name)
while True:
  try:
   add()
   bot.polling(none_stop = True)
   schedule.run_pending()
   time.sleep(1)
  except Exception as e:
   time.sleep(2)

Ответы (1 шт):

Автор решения: Sobolenko.Evgeniy

Чтобы увидеть почему не работает бот, нужно хотя бы добавить вывод информации об ошибке. Лучше это сделать с помощью модуля logging, но в вашем коде уже есть print, поэтому можно использовать его:

import traceback

@bot.message_handler(content_types=['text'])
def response(message):
    get_message_bot = message.text.strip().lower()
#print(message.from_user.first_name)
#print(message.from_user.last_name)
while True:
  try:
   add()
   bot.polling(none_stop = True)
   schedule.run_pending()
   time.sleep(1)
  except Exception as e:
   print(f'Получена ошибка {e} с описанием {e.args[0]}')
   print(traceback.format_exc())
   time.sleep(2)

Это поможет понять, что сломалось. На будущее советую использовать логгирование. В частности модуль loguru

→ Ссылка