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())
