Files
bot-news-linux-gaming/del-tests.py
Евгений (ХрамычЪ) Храмов 845f96209d Завершение модульной рефакторизации и исправления
Исправлены все основные проблемы:
- Исправлена логика фильтрации сообщений по топикам в Telegram
- Исправлен бесконечный цикл в VK клиенте get_wall_posts()
- Добавлена асинхронная поддержка для VK в главном файле
- Дедупликация работает корректно для всех платформ
- Добавлена полная документация в CLAUDE.md и README.md

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-11 15:11:39 +03:00

144 lines
4.4 KiB
Python
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import discord
import asyncio
import requests
import logging
import time
from telethon import TelegramClient, events
from discord.ext.commands import Bot
import keys # Файл, где хранятся ваши ключи доступа
url_vk_get = "https://api.vk.com/method/wall.get"
url_vk_delete = "https://api.vk.com/method/wall.delete"
# Укажите ваши токены и ID каналов
TELEGRAM_API_ID = keys.api_id_tg
TELEGRAM_API_HASH = keys.api_hash_tg
DISCORD_TOKEN = keys.discord_token
TELEGRAM_CHAT_ID = keys.channel_username_tg
DISCORD_CHANNEL_ID = keys.dicord_channel # Укажите ID вашего канала
# Создание экземпляра клиента Telethon
telegram_client = TelegramClient('session_name', TELEGRAM_API_ID, TELEGRAM_API_HASH)
# Удаление сообщений из Telegram
async def delete_all_telegram_messages(client, chat_id):
async for message in client.iter_messages(chat_id):
try:
await client.delete_messages(chat_id, message.id)
time.sleep(1.0)
print(f"Удалено сообщение {message.id}")
except Exception as e:
print(f"Не удалось удалить сообщение {message.id}: {e}")
# Удаление сообщений из Discord
class MyClient(discord.Client):
async def on_ready(self):
print(f'Вошли как {self.user}')
channel = self.get_channel(DISCORD_CHANNEL_ID)
if channel is not None:
await self.delete_all_messages(channel)
async def delete_all_messages(self, channel):
try:
async for message in channel.history(limit=100): # Установите лимит
try:
await message.delete()
print(f'Удалено сообщение {message.id}')
except Exception as e:
print(f"Не удалось удалить сообщение {message.id}: {e}")
except Exception as e:
print(f"Не удалось получить историю сообщений: {e}")
await self.close()
intents = discord.Intents.default()
intents.message_content = True
discord_client = MyClient(intents=intents)
# Основная функция
async def main():
await telegram_client.start()
print("Telegram клиент запущен")
await delete_all_telegram_messages(telegram_client, TELEGRAM_CHAT_ID)
await telegram_client.disconnect()
params_get = {
'access_token': keys.user_token_vk,
'v': '5.199', # Версия API
'owner_id': str(keys.own_id),
'count': 100,
'offset': 0
}
def get_all_posts():
all_posts = []
while True:
response = requests.get(url_vk_get, params=params_get)
data = response.json()
print(data)
if 'error' in data:
logging.error(f"Ошибка {data['error']['error_code']}: {data['error']['error_msg']}")
break
items = data.get('response', {}).get('items', [])
if not items:
break
all_posts.extend(items)
if len(items) < 100:
break
params_get['offset'] += 100
return all_posts
params_delete = {
'access_token': keys.user_token_vk,
'v': '5.199' # Версия API
}
def delete_post(post_id):
params_delete.update({
'owner_id': str(keys.own_id),
'post_id': post_id
})
response = requests.post(url_vk_delete, params=params_delete)
data = response.json()
if 'error' in data:
logging.error(f"Ошибка {data['error']['error_code']}: {data['error']['error_msg']}")
return False
return True
def delete_all_posts():
print("Удаление ВК постов запущено")
all_posts = get_all_posts()
print(all_posts)
if not all_posts:
logging.info("Нет постов для удаления")
return
for post in all_posts:
post_id = post['id']
if delete_post(post_id):
logging.info(f"Пост {post_id} успешно удален")
else:
logging.error(f"Не удалось удалить пост {post_id}")
time.sleep(1.0) # Пауза между запросами, чтобы избежать превышения лимитов API
if __name__ == "__main__":
delete_all_posts()
discord_client.run(DISCORD_TOKEN)
asyncio.run(main())