Как отправить жалобу в сообщении с выбранным типом жалобы? телемарафонPython

Программы на Python
Ответить
Anonymous
 Как отправить жалобу в сообщении с выбранным типом жалобы? телемарафон

Сообщение Anonymous »

Мой код:

Код: Выделить всё

REPORT_REASON_MAP = {
"child_abuse": InputReportReasonChildAbuse(),
"copyright": InputReportReasonCopyright(),
"illegal_drugs": InputReportReasonIllegalDrugs(),
"other": InputReportReasonOther(),
"personal_details": InputReportReasonPersonalDetails(),
"pornography": InputReportReasonPornography(),
"spam": InputReportReasonSpam(),
"violence": InputReportReasonViolence(),
}

async def report_message(link, reason) -> (int, int):
message_link_pattern = re.compile(r'https://t.me/(?P.+)/(?P\d+)')
chat_link_pattern = re.compile(r'https://t.me/c/(?P\d+)/(?P\d+)')

# Проверка на приватный канал по ссылке
if chat_link_pattern.match(link):
print(f"Группа {link} является приватной. Жалоба не будет отправлена.")
return 0, 0

match = message_link_pattern.search(link)

if not match:
print("Неверная ссылка.")
return 0, 0

chat = match.group("username_or_chat")
message_id = int(match.group("message_id"))

now = datetime.now()
last_report_time = last_report_times.get(chat)

if last_report_time and now - last_report_time < timedelta(minutes=8):
print(f"Жалобы на {chat} можно отправлять только раз в 8 минут. Попробуйте позже.")
return 0, 0

last_report_times[chat] = now

path = './sessions/'
files = os.listdir(path)
sessions = [s for s in files if s.endswith(".session") and s != 'bot.session']

successful_reports = 0
failed_reports = 0

report_reason = REPORT_REASON_MAP.get(reason)

if not report_reason:
print(f"Неверная причина: {reason}")
return 0, 0

for session in sessions:
try:
client = TelegramClient(f"{path}{session}", api_id, api_hash)

await client.connect()

if not await client.is_user_authorized():
print(f"Сессия {session} не авторизована, пропуск.")
failed_reports += 1
await client.disconnect()
continue

try:
entity = await client.get_entity(chat)

if isinstance(entity, Channel):
if not chat_link_pattern.match(link):
print(f"Публичный канал {chat}, жалоба отправляется.")
else:
print(f"Приватный канал {chat}, жалоба не отправляется.")
failed_reports += 1
continue
else:
print(f"Чат {chat} является приватным, жалоба не отправляется.")
failed_reports += 1
continue

report_reasons = random.choice(REPORT_MESSAGES)

await client.report(entity, message_id, report_reason, message=report_reasons)

await client(ReportRequest(
peer=entity,
id=[message_id],
reason=InputReportReasonSpam(),
message=report_reason
))

print(f"Жалоба отправлена через сессию {session}. Номер жалобы: {successful_reports}")
successful_reports += 1

except FloodWaitError as e:
wait_time = e.seconds
print(f"Flood wait error: необходимо подождать {wait_time} секунд.")
await asyncio.sleep(wait_time)

except Exception as e:
print(f"Ошибка при отправке жалобы через сессию {session}: {e}")
failed_reports += 1

finally:
await client.disconnect()

except Exception as e:
print(f"Ошибка при инициализации сессии {session}: {e}")
failed_reports += 1

return successful_reports, failed_reports
in await client.report(entity, message_id, report_reason, message=report_reasons) — в клиенте нет метода отчета. Мне сказали, что ее можно отправить через ReportRequest, но попробовав, нет аргумента для выбора типа жалобы, я не понимаю, как можно реализовать отправку жалобы на сообщение с выбранным типом жалобы.< /п>

Подробнее здесь: https://stackoverflow.com/questions/793 ... int-teleth
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»