Исправление цикла для ВК и небольшие правки
This commit is contained in:
7
.gitignore
vendored
7
.gitignore
vendored
@@ -1,8 +1,5 @@
|
||||
.fleet
|
||||
__pycache__
|
||||
keys*.py
|
||||
vkdel.py
|
||||
tgdel.py
|
||||
*.session
|
||||
*del-tests.py
|
||||
.idea
|
||||
.idea
|
||||
.gigaide
|
143
del-tests.py
Normal file
143
del-tests.py
Normal file
@@ -0,0 +1,143 @@
|
||||
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())
|
86
news-bot.py
86
news-bot.py
@@ -41,7 +41,7 @@ params_get = {
|
||||
}
|
||||
|
||||
logger = logging.getLogger()
|
||||
logger.setLevel(logging.INFO)
|
||||
logger.setLevel(logging.DEBUG)
|
||||
|
||||
handler = colorlog.StreamHandler()
|
||||
handler.setFormatter(colorlog.ColoredFormatter(
|
||||
@@ -489,43 +489,46 @@ def get_vk_topics():
|
||||
def check_vk_posts():
|
||||
vk_posts = get_vk_topics()
|
||||
if not vk_posts:
|
||||
logging.warning(f"Постов на стене нет{vk_posts}")
|
||||
|
||||
list_titles_and_ids = news()
|
||||
list_titles_and_ids = [pair for pair in list_titles_and_ids if pair[0] >= keys.start_topic_id]
|
||||
if list_titles_and_ids:
|
||||
list_for_public = []
|
||||
for topic_id, topic_title in list_titles_and_ids:
|
||||
# Сравнение заголовков с текстами постов
|
||||
if not any(topic_title in vk_posts for vk_posts in vk_posts):
|
||||
list_for_public.append((topic_id, topic_title))
|
||||
|
||||
if not list_for_public:
|
||||
logging.warning(f"Новостей для публикации в ВК нет")
|
||||
else:
|
||||
# Отфильтровываем посты ниже определенного ID статьи
|
||||
for topic_id, topic_title in reversed(list_for_public):
|
||||
logging.info(f"Новости для публикации в ВК: {list_for_public}")
|
||||
text_data = news_content(topic_id)
|
||||
if text_data:
|
||||
content = f"{topic_title}\t\n" + text_data + "\n"
|
||||
content = remove_markdown_links(content)
|
||||
|
||||
content = re.sub(r'https://linux-gaming.ru/uploads/default/original/1X/5cfa59077a5275971401fab0114e56f3ffdd0ec4.png', '\n', content, flags=re.DOTALL)
|
||||
links = extract_links(content)
|
||||
if "Кумулятивное обновление скриптов" in topic_title:
|
||||
# Пример добавления изображения с постом
|
||||
vk_post(url_vk_post, content, "photo-99238527_457244491")
|
||||
else:
|
||||
if links:
|
||||
vk_post(url_vk_post, content, links)
|
||||
else:
|
||||
vk_post(url_vk_post, content)
|
||||
else:
|
||||
logging.warning(f"Не удалось получить текст новости {topic_id}")
|
||||
time.sleep(1.0)
|
||||
logging.warning(f"Постов на стене нет {vk_posts}")
|
||||
else:
|
||||
logging.warning(f"Новостей для публикации в ВК нет")
|
||||
list_titles_and_ids = news()
|
||||
list_titles_and_ids = [pair for pair in list_titles_and_ids if pair[0] >= keys.start_topic_id]
|
||||
|
||||
if list_titles_and_ids:
|
||||
list_for_public = []
|
||||
# Отфильтровываем посты ниже определенного ID статьи
|
||||
for topic_id, topic_title in list_titles_and_ids:
|
||||
# Сравнение заголовков с текстами постов
|
||||
if not any(topic_title in vk_posts for vk_posts in vk_posts):
|
||||
list_for_public.append((topic_id, topic_title))
|
||||
|
||||
if not list_for_public:
|
||||
logging.warning(f"Новостей для публикации в ВК нет")
|
||||
else:
|
||||
# Отфильтровываем посты ниже определенного ID статьи
|
||||
for topic_id, topic_title in reversed(list_for_public):
|
||||
logging.info(f"Новости для публикации в ВК: {list_for_public}")
|
||||
text_data = news_content(topic_id)
|
||||
if text_data:
|
||||
content = f"{topic_title}\t\n" + text_data + "\n"
|
||||
content = remove_markdown_links(content)
|
||||
|
||||
content = re.sub(r'https://linux-gaming.ru/uploads/default/original/1X/5cfa59077a5275971401fab0114e56f3ffdd0ec4.png', '\n', content, flags=re.DOTALL)
|
||||
links = extract_links(content)
|
||||
|
||||
if "Кумулятивное обновление скриптов" in topic_title:
|
||||
# Пример добавления изображения с постом
|
||||
vk_post(url_vk_post, content, "photo-99238527_457244491")
|
||||
else:
|
||||
if links:
|
||||
vk_post(url_vk_post, content, links)
|
||||
else:
|
||||
vk_post(url_vk_post, content)
|
||||
else:
|
||||
logging.warning(f"Не удалось получить текст новости {topic_id}")
|
||||
time.sleep(1.0)
|
||||
else:
|
||||
logging.warning(f"Новостей для публикации в ВК нет")
|
||||
|
||||
|
||||
def tg_post(post_text, client_tg):
|
||||
@@ -574,12 +577,11 @@ async def check_tg_news():
|
||||
except FloodWaitError as e:
|
||||
logging.warning(f"Flood wait error: нужно подождать {e.seconds} секунд.")
|
||||
await asyncio.sleep(e.seconds) # Ждем
|
||||
time.sleep(1.0)# указанное время перед повторной попыткой
|
||||
time.sleep(1.0) # указанное время перед повторной попыткой
|
||||
|
||||
|
||||
def run_job():
|
||||
loop = asyncio.get_event_loop()
|
||||
loop.run_until_complete(job())
|
||||
asyncio.run(job())
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
@@ -587,9 +589,9 @@ if __name__ == '__main__':
|
||||
run_job()
|
||||
|
||||
# Планируем выполнение задачи каждые N минут
|
||||
schedule.every(30).minutes.do(run_job)
|
||||
schedule.every(30).minutes.do(check_vk_posts).do(run_job)
|
||||
|
||||
logger.info("Запуск планировщика задач")
|
||||
while True:
|
||||
schedule.run_pending()
|
||||
time.sleep(1)
|
||||
time.sleep(5)
|
||||
|
Reference in New Issue
Block a user