/report 命令应按如下方式工作:用户看到违反规则的消息并使用命令进行响应,有关报告的消息将发送到管理组,如果用户中的 5 个人报告了违规行为,则会将他们保留一天,以下是代码:
# Хранение данных о репортах
report_data = defaultdict(lambda: {'message_id': None, 'responses': set()})
@bot.message_handler(commands=['report'])
def handle_report(message):
chat_id = message.chat.id
report_data[chat_id]['message_id'] = message.message_id
report_data[chat_id]['responses'].clear()
bot.reply_to(message, "Пожалуйста, ответьте на сообщение, нарушающее правила, чтобы сообщить о нарушении.")
# Обработка ответа на сообщение с /report
@bot.message_handler(func=lambda msg: msg.reply_to_message and msg.reply_to_message.message_id in [data['message_id'] for data in report_data.values()])
def handle_response(message):
chat_id = message.chat.id
report = report_data[chat_id]
# Добавляем ID пользователя
report['responses'].add(message.from_user.id)
bot.send_message(admin_grops,f"послали репорт на >> tg://user?id={message.from_user.id}, @{message.from_user.username} " + message.text)
print(f"Пользователь @{message.from_user.username} сообщил о нарушении.")
# Проверяем, достаточно ли ответов для бана
if len(report['responses']) >= 5:
user_to_ban = message.reply_to_message.from_user.id
bot.kick_chat_member(chat_id, user_to_ban, until_date=int(time.time()) + 86400)
bot.send_message(admin_grops, f"Пользователь {user_to_ban} получил бан на 24 часа за нарушение.")
# Логируем бан
with open('ban_list.txt', 'a', encoding='utf-8') as f:
log_entry = f"{datetime.now()} - Пользователь {user_to_ban} получил бан\n"
f.write(log_entry)
# Удаляем данные о репорте
del report_data[chat_id]
但实际上代码的工作方式是这样的:用户发送一份报告(正如我之前所描述的),但机器人报告说该消息应该是对另一条消息的回应,尽管事实上一切都是正确的。但是报告不会通过,但如果另一个用户响应/report 命令,报告将通过同一个用户。请帮忙



