qwertyadrian / TG_AutoPoster

Telegram Bot for reposting from VK
MIT License
98 stars 19 forks source link

Пост из ВК репостится кругами #10

Closed NoAdO closed 2 years ago

NoAdO commented 2 years ago

Опишите ошибку Докер-контейнер в цикле постит один и тот же пост. В конфиге не увеличивается счётчик постов.

Как получить ошибку Постоянно по новой репостится вот этот пост https://vk.com/wall-156382674_1581 не смотря на то что в конфиге он помечен как последний. Предполагаю что (по логу) бот берёт пост, постит его, но выпадает в ошибку и не сохраняет что запостил. Убирание "polls" из списка what_to_send не решает проблему. Если last_id поставить 1581 или даже 1582 (этого поста ещё нет) то при перезапуске бота пост 1581 всё равно отправляется. Пересоздание контейнера не решает проблему т.е. есть какая-то внутренняя БД приоритетней чем config.ini и пост помеченный в config.ini как отправленный бот отправляет всё равно.

Ситуация осложняется ещё и тем что часть каналов репостят друг друга т.е. [gymkhanalen73] в том числе репостила этот пост, хотя репосты настроено не постить.

Ваш ПК (пожалуйста, укажите следующую информации):

[mototriathlon] channel = -1001472323545 last_id = 1581 pinned_id = 0

[gymkhana_su] channel = -1001472323545 last_id = 20822 pinned_id = 0

[public141931958] channel = -1001472323545 last_id = 5458 pinned_id = 0

[gymkhanalen73] channel = -1001472323545 last_id = 7378 pinned_id = 7225

Дополнительная информация pyrogram.errors.exceptions.bad_request_400.BroadcastPublicVotersForbidden: Telegram says: [400 BROADCAST_PUBLIC_VOTERS_FORBIDDEN] - Polls with public voters cannot be sent in channels (caused by "messages.SendMedia") During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.10/site-packages/apscheduler/executors/base.py", line 125, in run_job retval = job.func(*job.args, **job.kwargs) File "/usr/local/lib/python3.10/site-packages/TG_AutoPoster-3.0-py3.10.egg/TG_AutoPoster/TG_AutoPoster.py", line 109, in get_new_posts sender.send_post() File "/usr/local/lib/python3.10/site-packages/loguru/_logger.py", line 1226, in catch_wrapper return function(*args, **kwargs) File "/usr/local/lib/python3.10/site-packages/TG_AutoPoster-3.0-py3.10.egg/TG_AutoPoster/utils/vk/sender.py", line 66, in send_post self.send_poll(chat_id) File "/usr/local/lib/python3.10/site-packages/TG_AutoPoster-3.0-py3.10.egg/TG_AutoPoster/utils/tools.py", line 52, in wrapped return func(*args, **kwargs) File "/usr/local/lib/python3.10/site-packages/TG_AutoPoster-3.0-py3.10.egg/TG_AutoPoster/utils/vk/sender.py", line 136, in send_poll self._bot.send_poll( File "/usr/local/lib/python3.10/site-packages/pyrogram/sync.py", line 78, in async_to_sync_wrap return asyncio.run_coroutine_threadsafe(coroutine, main_loop).result() File "/usr/local/lib/python3.10/concurrent/futures/_base.py", line 446, in result return self.__get_result() File "/usr/local/lib/python3.10/concurrent/futures/_base.py", line 391, in __get_result raise self._exception File "/usr/local/lib/python3.10/site-packages/pyrogram/methods/messages/send_poll.py", line 143, in send_poll r = await self.invoke( File "/usr/local/lib/python3.10/site-packages/pyrogram/methods/advanced/invoke.py", line 77, in invoke r = await self.session.invoke( File "/usr/local/lib/python3.10/site-packages/pyrogram/session/session.py", line 362, in invoke return await self.send(query, timeout=timeout) File "/usr/local/lib/python3.10/site-packages/pyrogram/session/session.py", line 332, in send RPCError.raise_it(result, type(data)) File "/usr/local/lib/python3.10/site-packages/pyrogram/errors/rpc_error.py", line 91, in raise_it raise getattr( pyrogram.errors.exceptions.bad_request_400.BroadcastPublicVotersForbidden: Telegram says: [400 BROADCAST_PUBLIC_VOTERS_FORBIDDEN] - Polls with public voters cannot be sent in channels (caused by "messages.SendMedia") Этот лог повторяется в цикле.

NoAdO commented 2 years ago

Upd: по непонятным мне причинам ни увеличение счётчика ни даже стирание из конфига обоих каналов в которых есть этот пост не чинило проблему - каналов в конфиге больше нет, контейнер пересоздан.. и пост всё равно репостится! Похоже удалось починить, стерев всё содержимое папки кроме config.ini и stop.ini . "Плохое" содержимое сохранил, готов предоставить по запросу.

Возможно есть какие-то недочёты при работе с конфигом, сейчас выглядит так будто скрипт считывает конфиг, создаёт собственную БД для работы и с ней работает а конфиг больше не читает.

qwertyadrian commented 2 years ago

приоритетней чем config.ini

TG_AutoPoster версии 3.0 и выше использует формат конфигурации YAML. При запуске бота будет открываться файл в новом формате (файл config.yaml по умолчанию). Если его нет, но есть файл конфигурации формата INI, то он будет конвертирован в новый формат. После этого файл INI больше не будет использоваться.

Ошибка с отправкой опросов есть, она будет исправлена в версии 3.0.1. При необходимости есть предварительная версия 3.0.1b1.

NoAdO commented 2 years ago

Понял, не знал об этом нововведении поскольку ini не был автоматически удалён. Почему-то если очистить всё кроме yaml и stop.ini я получал ошибку pyrogram.errors.exceptions.bad_request_400.PeerIdInvalid: Telegram says: [400 PEER_ID_INVALID] - The peer id being used is invalid or not known yet. Make sure you meet the peer before interacting with it но когда восстановил весь "плохой" конфиг, удалил ненужный config.ini и исправил в yaml ID поста на свежий - всё починилось. Спасибо за помощь в диагностике, буду ждать новой версии.

qwertyadrian commented 2 years ago

я получал ошибку

Была ошибка в модуле, отвечающий за конвертацию файла конфигурации. Она исправлена в предварительной версии 3.0.1b2