не работают некоторые четко прописаные функции в телеграм боте
О проекте:
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