qwertyadrian / tg_autoposter Goto Github PK
View Code? Open in Web Editor NEWTelegram Bot for reposting from VK
License: MIT License
Telegram Bot for reposting from VK
License: MIT License
Идея улучшения
Добрый день, возможно ли как то по простому добавить автора поста через footer сообщения, вывести переменную?
Пробовал $user, это не работает.
Здравствуйте а возможно скачивать с вк не gif?
Так как через браузер можно сохранить как видео, так как если в одном посту есть много текста плюс картинки плюс 1-2 gif то получается это все не 1 сообщением в TG а в 4
Первое сообщения это большой текст (но тут я понимаю ограничения телеграма и возможно с покупкой премиум это решиться)
Второе сообщения это картинки (так как если пост больше сколько то символов вместе с вложениями просит купить премиум)
Третий пост это GIF ну и 4 пост вторая GIF
Но вот если это видео то можно сразу загружать в один пост вместе с картинками.
Как по это лучший вариант
Кажется было бы полезно в Readme это добавить. Какие значения можно ставить безопансно? Если это известно
Все работало а вчера упало в ошибку
Job "AutoPoster.get_new_posts (trigger: interval[0:10:00], next run at: 2023-12-17 11:32:41 UTC)" raised an exception
Traceback (most recent call last):
File "/usr/local/lib/python3.10/dist-packages/apscheduler/executors/base.py", line 125, in run_job
retval = job.func(*job.args, **job.kwargs)
File "/home/vk/TG_AutoPoster/TG_AutoPoster.py", line 127, in get_new_posts
for post in chain(group.get_posts(), group.get_stories()):
File "/home/vk/TG_AutoPoster/utils/vk/group.py", line 93, in get_posts
yield from self.get_post(post)
File "/home/vk/TG_AutoPoster/utils/vk/group.py", line 108, in get_post
if re.findall(
File "/usr/lib/python3.10/re.py", line 240, in findall
return _compile(pattern, flags).findall(string)
File "/usr/lib/python3.10/re.py", line 303, in _compile
p = sre_compile.compile(pattern, flags)
File "/usr/lib/python3.10/sre_compile.py", line 788, in compile
p = sre_parse.parse(p, flags)
File "/usr/lib/python3.10/sre_parse.py", line 955, in parse
p = _parse_sub(source, state, flags & SRE_FLAG_VERBOSE, 0)
File "/usr/lib/python3.10/sre_parse.py", line 444, in _parse_sub
itemsappend(_parse(source, state, verbose, nested + 1,
File "/usr/lib/python3.10/sre_parse.py", line 669, in _parse
raise source.error("nothing to repeat",
re.error: nothing to repeat at position 0
Опишите ошибку
При запуске скрипта: python3 -m TG_AutoPoster получаю:
/usr/local/lib/python3.7/dist-packages/apscheduler/util.py:94: PytzUsageWarning: The zone attribute is specific to pytz's interface; please migrate to a new time zone provider. For more details on how to do so, see https://pytz-deprecation-shim.readthedocs.io/en/latest/migration.html
if obj.zone == 'local':
/usr/local/lib/python3.7/dist-packages/apscheduler/util.py:165: PytzUsageWarning: The localize method is no longer necessary, as this time zone supports the fold attribute (PEP 495). For more details on migrating to a PEP 495-compliant implementation, see https://pytz-deprecation-shim.readthedocs.io/en/latest/migration.html
return tz.localize(datetime_, is_dst=None)
/usr/local/lib/python3.7/dist-packages/apscheduler/triggers/interval.py:66: PytzUsageWarning: The normalize method is no longer necessary, as this time zone supports the fold attribute (PEP 495). For more details on migrating to a PEP 495-compliant implementation, see https://pytz-deprecation-shim.readthedocs.io/en/latest/migration.html
return self.timezone.normalize(next_fire_time)
Лог-файл
bot_log_2022-09-20_14-18-29_028792_DEBUG.log
Ваш ПК (пожалуйста, укажите следующую информацию):
Не нашел в описании настройку автопостинга по ключевым словам, т.е. автопост только тех постов, в которых есть упоминание описанных ключевых слов. Имеется ли здесь такая возможность или может быть планируется добавить?
Опишите ошибку
Бот публикует предложку группы сразу на стену
Как получить ошибку
Шаги для воспроизведения ошибки:
Ожидаемое поведение
Не хотелось бы, чтобы бот отправлял предложку без моего разрешения
Лог-файл
Загрузите лог-файл бота, запущенного в режиме отладки (параметр --debug
).
2023-04-01 20:51:48.415 | INFO | __main__:<module>:97 - TG AutoPoster запущен
2023-04-01 20:51:48.417 | DEBUG | __main__:<module>:98 - Python 3.11.1 (main, Jan 9 2023, 20:37:01) [GCC 12.2.1 20220924]
TG_AutoPoster 3.4.0
OS: linux
Config path: /data/config.yaml
Cache dir: /tmp/TG_AutoPosterbudwnx0n
Passed args:['--debug']
/usr/local/lib/python3.11/site-packages/tzlocal/unix.py:177: UserWarning: Can not find any timezone configuration, defaulting to UTC.
warnings.warn("Can not find any timezone configuration, defaulting to UTC.")
2023-04-01 20:51:48.668 | INFO | TG_AutoPoster.TG_AutoPoster:listen:148 - [VK] Для источника https://vk.com/gulstore включен режим Long Poll API
2023-04-01 20:51:53.672 | INFO | TG_AutoPoster.TG_AutoPoster:get_new_posts:145 - [VK] Проверка завершена
далее все как обычно
Если дать только право "стена", то выдаёт это:
Job "AutoPoster.listen (trigger: date[2023-04-01 20:51:48 UTC], next run at: 2023-04-01 20:51:48 UTC)" raised an exception
Traceback (most recent call last):
File "/usr/local/lib/python3.11/site-packages/apscheduler/executors/base.py", line 125, in run_job
retval = job.func(*job.args, **job.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/TG_AutoPoster-3.4.0-py3.11.egg/TG_AutoPoster/TG_AutoPoster.py", line 162, in listen
longpoll = VkBotLongPoll(self.vk_session, group_id=-group.group_id)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/vk_api/bot_longpoll.py", line 219, in __init__
self.update_longpoll_server()
File "/usr/local/lib/python3.11/site-packages/vk_api/bot_longpoll.py", line 232, in update_longpoll_server
response = self.vk.method('groups.getLongPollServer', values)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/vk_api/vk_api.py", line 697, in method
raise error
vk_api.exceptions.ApiError: [15] Access denied: no access to call this method
Дополнительная информация
(tgbot) C:\Users\usr\Desktop\TelegramBot>py -m TG_AutoPoster
Traceback (most recent call last):
File "C:\Users\usr\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 196, in _run_module_as_main
return _run_code(code, main_globals, None,
File "C:\Users\usr\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 86, in _run_code
exec(code, run_globals)
File "C:\Users\usr\Desktop\TelegramBot\tgbot\lib\site-packages\TG_AutoPoster\__main__.py", line 108, in <module>
client = AutoPoster(
File "C:\Users\usr\Desktop\TelegramBot\tgbot\lib\site-packages\TG_AutoPoster\TG_AutoPoster.py", line 36, in __init__
self.config = ini_to_dict(self.config_path.with_suffix(".ini"))
File "C:\Users\usr\Desktop\TelegramBot\tgbot\lib\site-packages\TG_AutoPoster\utils\convert.py", line 16, in ini_to_dict
for option in config.options("global"):
File "C:\Users\usr\AppData\Local\Programs\Python\Python310\lib\configparser.py", line 675, in options
raise NoSectionError(section) from None
configparser.NoSectionError: No section: 'global'
доброго времени суток! бот даже не включается, выводя вот это безобразие. что делать?
При запуске бота вылетает ошибка:
ERROR | TG_AutoPoster.utils.vk.group:get_raw_posts:184 - [VK] Ошибка получения постов: [3] Unknown method passed
А есть ли возможность доставать из постов не ссылки на видео VK а на оригинал с ютуба?
А еще в parse_photo нету проверки на ошибку, бывало такое что пять картинок скачалось а шестая не грузится битая и бот падал в ошибку, по правил ручками обвернув в try.
Ну и очень очень редкое, но если в посте VK больше чем 1 gif загружена то бот тоже падает в ошибку, так как с вк он скачивает все gif а вот в телеграмм не может их отправить
Некоторые видео в ВК не имеют access_key
Бот зависает на ошибке в файле /TG_AutoPoster/utils/vk/parser.py на строке 211
Для себя решил следующим образом:
def parse_video(self, attachment):
logger.info("[VK] Извлечение видео")
logger.debug(attachment)
try:
video_text = (
'\n🎥 <a href="https://m.vk.com/video{owner_id}_{id}?list={access_key}">{title}</a>'
'\n👁 {views} раз(а) ⏳ {duration} сек'
).format(**attachment)
except:
logger.warning(
"[VK] Не удалось получить прямую ссылку на видео. "
"Пропускаем его."
)
return
Ошибка получения постов: [100] One of the parameters specified was missing or invalid: group_id not domain
Куда копать как исправить?Ошибка при запуске
2023-12-12 21:37:03.348 | INFO | main::98 - TG AutoPoster запущен
2023-12-12 21:37:08.363 | INFO | TG_AutoPoster.utils.vk.group:get_posts:69 - [VK] Проверка на наличие новых постов в https://vk.com/test7878 с последним ID [151]
2023-12-12 21:37:08.446 | ERROR | TG_AutoPoster.utils.vk.group:get_raw_posts:184 - [VK] Ошибка получения постов: [100] One of the parameters specified was missing or invalid: group_id not domain
2023-12-12 21:37:08.447 | INFO | TG_AutoPoster.TG_AutoPoster:get_new_posts:135 - [VK] Проверка завершена
Опишите ошибку
Как получить ошибку
Создать пост со встроенной ютуб ссылкой
Пост с ссылкой на ютуб видео в VK
Ожидаемое поведение
Абсолютно идентичный пост с Embedded видео на YouTube.com
Traceback
Traceback (most recent call last):
File "TG_AutoPoster.py", line 167, in <module>
autoposter.infinity_run(interval=sleep_time)
File "TG_AutoPoster.py", line 141, in infinity_run
self.run()
File "TG_AutoPoster.py", line 114, in run
for post in posts:
File "/opt/TG_AutoPoster/parsers.py", line 81, in get_new_posts
parsed_post.generate_post()
File "/opt/TG_AutoPoster/parsers.py", line 157, in generate_post
self.generate_music()
File "/opt/TG_AutoPoster/parsers.py", line 244, in generate_music
file = download(track["url"], out=name)
File "/usr/local/lib/python3.7/dist-packages/wget.py", line 526, in download
(tmpfile, headers) = ulib.urlretrieve(binurl, tmpfile, callback)
File "/usr/lib/python3.7/urllib/request.py", line 247, in urlretrieve
with contextlib.closing(urlopen(url, data)) as fp:
File "/usr/lib/python3.7/urllib/request.py", line 222, in urlopen
return opener.open(url, data, timeout)
File "/usr/lib/python3.7/urllib/request.py", line 510, in open
req = Request(fullurl, data)
File "/usr/lib/python3.7/urllib/request.py", line 328, in __init__
self.full_url = url
File "/usr/lib/python3.7/urllib/request.py", line 354, in full_url
self._parse()
File "/usr/lib/python3.7/urllib/request.py", line 383, in _parse
raise ValueError("unknown url type: %r" % self.full_url)
ValueError: unknown url type: ''
Как должно быть
Message(
id=1,
to_id=PeerChannel(
channel_id=1234567890
),
message='https://youtu.be/Eq6H2qFIIGg',
out=True,
post=True,
media=MessageMediaWebPage(
webpage=WebPage(
id=5127856301393798154,
url='https://youtu.be/Eq6H2qFIIGg',
display_url='youtube.com/watch?v=Eq6H2qFIIGg',
hash=0,
type='video',
site_name='YouTube',
title='Hero Pool Draw | Watchpoint | Hosted by Houston Outlaws',
description="Watch the first Hero Pool Draw of the season! Find out which heroes will be unavailable for next weekend's matches in Washington. Week 4 of the 2020 Overwatc...",
embed_url='https://www.youtube.com/embed/Eq6H2qFIIGg',
embed_type='iframe',
embed_width=1280,
embed_height=720,
duration=None,
author=None,
document=None,
cached_page=None,
attributes=[])),
entities=[
MessageEntityUrl(
offset=0,
length=28
)])
Опишите ошибку
Докер-контейнер в цикле постит один и тот же пост. В конфиге не увеличивается счётчик постов.
Как получить ошибку
Постоянно по новой репостится вот этот пост 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")
Этот лог повторяется в цикле.
Приветствую а есть возможность обойти ограничения в 100 последних постов из группы?
Если нужно достать все посты за пару лет последних, может каким то циклом пробегаться или api вк не даст?
Идея улучшения
при использовании inline keyboard пропадает кнопка комментирования в самом телеграмме. Может реализовать дополнительную кнопку для перехода к комментированию. Так же в идеале сделать параметр в конфиге отвечающий за отображение кнопки, так как не всегда к каналу привязан чат для комментирования.
Так как есть ограничения в запросах у вк, предлагаю добавить возможность добавлять более 1-2 аккаунтов ВК.
Я точно не знаю возможно ли это, но для более массового пользования самое то.
Суть: не использовать один аккаунт для запроса, постоянно перебирая аккаунты и с них посылать запрос. Допустим устанавливаем определенный лимит в 1000 запросов, как только он достигает этого верха, переключаемся на другой аккаунт, дабы избежать заморозки и так в определенном порядке (или рандоме)
Если на стене группы находится просто альбом в котором условно 20-50 фото то бот постит в тг лишь ссылку на него, было бы не плохо что бы он и это умел парсить в несколько постов подрят
Приветсвую, задам нубский вопрос. Так и не смог понять где именно нужно создавать файл конфигурации из инструкции config.yaml
Подскажите путь.
Сейчас можно дать боту ссылку формата https://vk.com/vk. Это запись ссылки с логином группы, который может меняться. Наверное через апи вк можно получать id группы (у этой - club22822305) и автоматически в конфиги сохранять ссылки в формате https://vk.com/club22822305, чтобы не менять конфиг при изменении красивой ссылки на группу
Возможность делать проверку валидности всех источников постов в боте, что-бы можно было вычислить заблокированные/приватные группы.
(Как я понял, сейчас если есть заблокированная/приватная группа в списке, то при начале проверки постов, если бот напирается на эту группу, дальше стопается вся проверка постов)
Сделать например командой: /check, или запускать проверку раз в сутки и отправлять уведомление в бота.
/app/.heroku/python/lib/python3.6/site-packages/requests/init.py:91: RequestsDependencyWarning: urllib3 (1.25.3) or chardet (3.0.4) doesn't match a supported version!
Последние дня 3-4 стабильно ближе к вечеру начинаются зависания проверок и при скачивание картинок и дальше бот зависает, можно раз по 10 пере запускать и иногда все таки пробивается
Job "AutoPoster.get_new_posts (trigger: interval[1:00:00], next run at: 2023-04-06 02:32:04 EEST)" raised an exception
Traceback (most recent call last):
File "/usr/lib/python3.8/urllib/request.py", line 1354, in do_open
h.request(req.get_method(), req.selector, req.data, headers,
File "/usr/lib/python3.8/http/client.py", line 1256, in request
self._send_request(method, url, body, headers, encode_chunked)
File "/usr/lib/python3.8/http/client.py", line 1302, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "/usr/lib/python3.8/http/client.py", line 1251, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "/usr/lib/python3.8/http/client.py", line 1011, in _send_output
self.send(msg)
File "/usr/lib/python3.8/http/client.py", line 951, in send
self.connect()
File "/usr/lib/python3.8/http/client.py", line 1418, in connect
super().connect()
File "/usr/lib/python3.8/http/client.py", line 922, in connect
self.sock = self._create_connection(
File "/usr/lib/python3.8/socket.py", line 808, in create_connection
raise err
File "/usr/lib/python3.8/socket.py", line 796, in create_connection
sock.connect(sa)
TimeoutError: [Errno 110] Connection timed out
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.8/dist-packages/apscheduler/executors/base.py", line 125, in run_job
retval = job.func(*job.args, **job.kwargs)
File "/home/TG_AutoPoster/TG_AutoPoster/TG_AutoPoster.py", line 127, in get_new_posts
for post in chain(group.get_posts(), group.get_stories()):
File "/home/TG_AutoPoster/TG_AutoPoster/utils/vk/group.py", line 93, in get_posts
yield from self.get_post(post)
File "/home/TG_AutoPoster/TG_AutoPoster/utils/vk/group.py", line 128, in get_post
parsed_post.parse_post()
File "/home/TG_AutoPoster/TG_AutoPoster/utils/vk/parser.py", line 70, in parse_post
self.parse_photo(attachment["photo"])
File "/home/TG_AutoPoster/TG_AutoPoster/utils/vk/parser.py", line 154, in parse_photo
photo = download(photo, bar=None)
File "/usr/local/lib/python3.8/dist-packages/wget.py", line 526, in download
(tmpfile, headers) = ulib.urlretrieve(binurl, tmpfile, callback)
File "/usr/lib/python3.8/urllib/request.py", line 247, in urlretrieve
with contextlib.closing(urlopen(url, data)) as fp:
File "/usr/lib/python3.8/urllib/request.py", line 222, in urlopen
return opener.open(url, data, timeout)
File "/usr/lib/python3.8/urllib/request.py", line 525, in open
response = self._open(req, data)
File "/usr/lib/python3.8/urllib/request.py", line 542, in _open
result = self._call_chain(self.handle_open, protocol, protocol +
File "/usr/lib/python3.8/urllib/request.py", line 502, in _call_chain
result = func(*args)
File "/usr/lib/python3.8/urllib/request.py", line 1397, in https_open
return self.do_open(http.client.HTTPSConnection, req,
File "/usr/lib/python3.8/urllib/request.py", line 1357, in do_open
raise URLError(err)
urllib.error.URLError: <urlopen error [Errno 110] Connection timed out>
Добавить возможность поиска группы или ссылки на пост, для вычисления источника поста с рекламой.
Возможно нужна будет БД, но чтобы не допустить "раздутие" и тормозов обработки очищать ее каждые n суток по настройке в конфиге.
Пример: в бота посылается пост из привязанного канала, бот выдает данные по посту (группу, ссылку на пост)
Опишите ошибку
не запускается контейнер, просит модуль 'крипто'
Как получить ошибку
Шаги для воспроизведения ошибки:
docker pull qwertyadrian/tg_autoposter:master
docker run -it --name tgautoposter -v /root:/data 3ab97fb78456
root@main:~# docker start -ai 7a8b6ef9d21f
Traceback (most recent call last):
File "<frozen runpy>", line 189, in _run_module_as_main
File "<frozen runpy>", line 148, in _get_module_details
File "<frozen runpy>", line 112, in _get_module_details
File "/usr/local/lib/python3.11/site-packages/TG_AutoPoster-3.5.0b1-py3.11.egg/TG_AutoPoster/__init__.py", line 1, in <module>
File "/usr/local/lib/python3.11/site-packages/TG_AutoPoster-3.5.0b1-py3.11.egg/TG_AutoPoster/TG_AutoPoster.py", line 14, in <module>
File "/usr/local/lib/python3.11/site-packages/TG_AutoPoster-3.5.0b1-py3.11.egg/TG_AutoPoster/utils/__init__.py", line 3, in <module>
File "/usr/local/lib/python3.11/site-packages/TG_AutoPoster-3.5.0b1-py3.11.egg/TG_AutoPoster/utils/vk/__init__.py", line 1, in <module>
File "/usr/local/lib/python3.11/site-packages/TG_AutoPoster-3.5.0b1-py3.11.egg/TG_AutoPoster/utils/vk/group.py", line 9, in <module>
File "/usr/local/lib/python3.11/site-packages/TG_AutoPoster-3.5.0b1-py3.11.egg/TG_AutoPoster/utils/vk/parser.py", line 14, in <module>
File "/usr/local/lib/python3.11/site-packages/TG_AutoPoster-3.5.0b1-py3.11.egg/TG_AutoPoster/utils/vk/tools.py", line 8, in <module>
ModuleNotFoundError: No module named 'Crypto'
Ожидаемое поведение
ожидал запустить бота
Лог-файл
логов нет
Ваш ПК (пожалуйста, укажите следующую информацию):
linux сервер
Дополнительная информация
Пишет что извлекает видео, но у него не получается.
TG_AutoPoster.utils.vk.parser:parse_post:53 - [VK] Парсинг поста.
TG_AutoPoster.utils.vk.parser:parse_video:181 - [VK] Извлечение видео
TG_AutoPoster.utils.vk.parser:parse_video:182 - {'response_type': 'full', 'access_key': '-', 'can_comment': 1, 'can_edit': 1, 'can_delete': 1, 'can_like': 1, 'can_repost': 1, 'can_add_to_faves': 1, 'can_add': 1, 'can_attach_link': 1, 'can_edit_privacy': 1, 'comments': 0, 'date': 1698554673, 'description': '', 'duration': 118, 'image': [{'url': 'https://i.mycdn.me/getVideoPreview?id=5336791452255&idx=14&type=39&tkn=V6zt1kS6JG29ZhuCy4NIBLHpScE&fn=vid_s', 'width': 130, 'height': 96, 'with_padding': 1}, {'url': 'https://i.mycdn.me/getVideoPreview?id=5336791452255&idx=14&type=39&tkn=V6zt1kS6JG29ZhuCy4NIBLHpScE&fn=vid_m', 'width': 160, 'height': 120, 'with_padding': 1}, {'url': 'https://i.mycdn.me/getVideoPreview?id=5336791452255&idx=14&type=39&tkn=V6zt1kS6JG29ZhuCy4NIBLHpScE&fn=vid_l', 'width': 320, 'height': 240, 'with_padding': 1}, {'url': 'https://i.mycdn.me/getVideoPreview?id=5336791452255&idx=14&type=39&tkn=V6zt1kS6JG29ZhuCy4NIBLHpScE&fn=vid_x', 'width': 800, 'height': 450, 'with_padding': 1}, {'url': 'https://i.mycdn.me/getVideoPreview?id=5336791452255&idx=14&type=39&tkn=V6zt1kS6JG29ZhuCy4NIBLHpScE&fn=vid_w', 'width': 1280, 'height': 720}, {'url': 'https://i.mycdn.me/getVideoPreview?id=5336791452255&idx=14&type=39&tkn=V6zt1kS6JG29ZhuCy4NIBLHpScE&fn=vid_t', 'width': 320, 'height': 180}, {'url': 'https://i.mycdn.me/getVideoPreview?id=5336791452255&idx=14&type=39&tkn=V6zt1kS6JG29ZhuCy4NIBLHpScE&fn=vid_u', 'width': 720, 'height': 405}], 'first_frame': [{'url': 'https://i.mycdn.me/getVideoPreview?id=5336791452255&idx=0&type=39&tkn=-B6WOKJ8bwZxEWlYT0PwkgfdY-M&fn=vid_f', 'width': 720, 'height': 405}, {'url': 'https://i.mycdn.me/getVideoPreview?id=5336791452255&idx=0&type=39&tkn=-B6WOKJ8bwZxEWlYT0PwkgfdY-M&fn=vid_md', 'width': 480, 'height': 270}, {'url': 'https://i.mycdn.me/getVideoPreview?id=5336791452255&idx=0&type=39&tkn=-B6WOKJ8bwZxEWlYT0PwkgfdY-M&fn=vid_d', 'width': 240, 'height': 135}, {'url': 'https://i.mycdn.me/getVideoPreview?id=5336791452255&idx=0&type=39&tkn=-B6WOKJ8bwZxEWlYT0PwkgfdY-M&fn=vid_sm', 'width': 128, 'height': 72}, {'url': 'https://i.mycdn.me/getVideoPreview?id=5336791452255&idx=0&type=39&tkn=-B6WOKJ8bwZxEWlYT0PwkgfdY-M&fn=vid_w', 'width': 1280, 'height': 720}, {'url': 'https://i.mycdn.me/getVideoPreview?id=5336791452255&idx=0&type=39&tkn=-B6WOKJ8bwZxEWlYT0PwkgfdY-M&fn=vid_h', 'width': 960, 'height': 540}, {'url': 'https://i.mycdn.me/getVideoPreview?id=5336791452255&idx=0&type=39&tkn=-B6WOKJ8bwZxEWlYT0PwkgfdY-M&fn=vid_w', 'width': 1280, 'height': 720}], 'width': 1280, 'height': 720, 'id': 456239024, 'owner_id': -223093605, 'is_author': True, 'title': 'Видео от Test', 'is_favorite': False, 'track_code': 'video_802157c8MDbCPW4xOr7RvFZrf2lA_RrdadEWnq-zSV39-vUn198AEtY8ajI_2NqKZl4gXXXLKO5Q4SSqq8QoMZH6', 'type': 'video', 'views': 1, 'local_views': 1, 'can_dislike': 1}
TG_AutoPoster.TG_AutoPoster:get_new_posts:147 - [VK] Проверка завершена
Пробывал и на Windows, и на Linux. Создал новую группу в ВК и канал в телеграме; включать и отключать репост видео.
Опишите ошибку
В какой-то момент бот перестает репостить новые сообщения. В логах повторяется "socket.send() raised exception." без подробностей, ресарт контейнера решает проблему.
Как получить ошибку
Шаги для воспроизведения ошибки: неизвестно
Ваш ПК (пожалуйста, укажите следующую информацию):
Дополнительная информация
config без токенов.yaml.txt
stop.ini
#storm08travel
Может как-нибудь заставить контейнер писать в папку с конфигом подробный лог? хоть будет понятно в какой момент случился затык, последний строчки все одинаковые.
Хотелось бы сообщения из некоторых источников подписывать. Первой строчкой в сообщении название группы, из которой пост. Можно через телеграмовское форматирование сразу ссылку прятать внутри названия.
Когда группа делает репост, Autoposter не видит его
Как получить ошибку
ПК
Можешь по править и добавить проверки на соединение, когда на пример сервер не может достучаться до вк или отправить в тг пост, падает с ошибкой.
Что бы он какое то время спал и пробовал снова
Бывают ситуации когда сервер теряет интернет в момент проверки и дальше он зависает, даже если в sh стоит повторная проверка через 60 секунд.
Job "AutoPoster.get_new_posts (trigger: interval[0:53:20], next run at: 2023-07-30 23:40:13 MSK)" raised an exception
Traceback (most recent call last):
File "/usr/local/lib/python3.10/dist-packages/apscheduler/executors/base.py", line 125, in run_job
retval = job.func(*job.args, **job.kwargs)
File "/home/tgpost/TG_AutoPoster/TG_AutoPoster.py", line 127, in get_new_posts
for post in chain(group.get_posts(), group.get_stories()):
File "/home/tgpost/TG_AutoPoster/utils/vk/group.py", line 79, in get_posts
total = self.get_raw_posts(1)["count"]
KeyError: 'count'
Идея улучшения*
Сейчас скрипт может работать "по кругу" благодаря аргументам -l и -s . Просьба заключается в возможности добавить этот режим для докер-контейнера через переключалку в ENV или что-то подобное.
Опишите ошибку
Произошла ошибка pyrogram.errors.exceptions.bad_request_400.MediaEmpty: Telegram says: [400 MEDIA_EMPTY] - The media you tried to send is invalid (caused by "messages.SendMultiMedia") при попытке отправки поста, содержащего две или более гифки.
Как получить ошибку
Шаги для воспроизведения ошибки:
Ожидаемое поведение
Репост всех гифок друг за другом
Ваш ПК (пожалуйста, укажите следующую информацию):
Опишите ошибку
До сегодняшнего дня работало отлично.
Утром запустил и получил ошибку CERTIFICATE_VERIFY_FAILED.
Как это можно исправить?
Лог-файл
PS C:\Users\Nick\Desktop\telegram_to_vk-master\TG_AutoPoster-master> py -m TG_AutoPoster --sleep 300
Job "AutoPoster.get_new_posts (trigger: interval[0:05:00], next run at: 2024-02-04 11:57:01 MSK)" raised an exception
Traceback (most recent call last):
File "C:\Users\Nick\AppData\Local\Programs\Python\Python311\Lib\urllib\request.py", line 1348, in do_open
h.request(req.get_method(), req.selector, req.data, headers,
File "C:\Users\Nick\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 1282, in request
self._send_request(method, url, body, headers, encode_chunked)
File "C:\Users\Nick\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 1328, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "C:\Users\Nick\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 1277, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "C:\Users\Nick\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 1037, in _send_output
self.send(msg)
File "C:\Users\Nick\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 975, in send
self.connect()
File "C:\Users\Nick\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 1454, in connect
self.sock = self._context.wrap_socket(self.sock,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nick\AppData\Local\Programs\Python\Python311\Lib\ssl.py", line 517, in wrap_socket
return self.sslsocket_class._create(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nick\AppData\Local\Programs\Python\Python311\Lib\ssl.py", line 1075, in _create
self.do_handshake()
File "C:\Users\Nick\AppData\Local\Programs\Python\Python311\Lib\ssl.py", line 1346, in do_handshake
self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:992)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\Nick\AppData\Local\Programs\Python\Python311\Lib\site-packages\apscheduler\executors\base.py", line 125, in run_job
retval = job.func(*job.args, **job.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nick\Desktop\telegram_to_vk-master\TG_AutoPoster-master\TG_AutoPoster\TG_AutoPoster.py", line 127, in get_new_posts
for post in chain(group.get_posts(), group.get_stories()):
File "C:\Users\Nick\Desktop\telegram_to_vk-master\TG_AutoPoster-master\TG_AutoPoster\utils\vk\group.py", line 93, in get_posts
yield from self.get_post(post)
File "C:\Users\Nick\Desktop\telegram_to_vk-master\TG_AutoPoster-master\TG_AutoPoster\utils\vk\group.py", line 121, in get_post
parsed_post.parse_post()
File "C:\Users\Nick\Desktop\telegram_to_vk-master\TG_AutoPoster-master\TG_AutoPoster\utils\vk\parser.py", line 70, in parse_post
self.parse_photo(attachment["photo"])
File "C:\Users\Nick\Desktop\telegram_to_vk-master\TG_AutoPoster-master\TG_AutoPoster\utils\vk\parser.py", line 154, in parse_photo
photo = download(photo, bar=None)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nick\AppData\Local\Programs\Python\Python311\Lib\site-packages\wget.py", line 526, in download
(tmpfile, headers) = ulib.urlretrieve(binurl, tmpfile, callback)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nick\AppData\Local\Programs\Python\Python311\Lib\urllib\request.py", line 241, in urlretrieve
with contextlib.closing(urlopen(url, data)) as fp:
^^^^^^^^^^^^^^^^^^
File "C:\Users\Nick\AppData\Local\Programs\Python\Python311\Lib\urllib\request.py", line 216, in urlopen
return opener.open(url, data, timeout)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nick\AppData\Local\Programs\Python\Python311\Lib\urllib\request.py", line 519, in open
response = self._open(req, data)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nick\AppData\Local\Programs\Python\Python311\Lib\urllib\request.py", line 536, in _open
result = self._call_chain(self.handle_open, protocol, protocol +
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nick\AppData\Local\Programs\Python\Python311\Lib\urllib\request.py", line 496, in _call_chain
result = func(*args)
^^^^^^^^^^^
File "C:\Users\Nick\AppData\Local\Programs\Python\Python311\Lib\urllib\request.py", line 1391, in https_open
return self.do_open(http.client.HTTPSConnection, req,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Nick\AppData\Local\Programs\Python\Python311\Lib\urllib\request.py", line 1351, in do_open
raise URLError(err)
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:992)>
Ваш ПК (пожалуйста, укажите следующую информацию):
Идея улучшения
Сейчас при запуске бота с активированным longpoll проверка на наличие новых постов (которые не были опубликованы на канале до запуска бота) отсутствует. Предлагаю добавить эту проверку.
Опишите ошибку
Четкое и краткое описание того, что произошло.
— после примерно 24 часов исправной работы бот не пересылает новые посты
Как получить ошибку
Шаги для воспроизведения ошибки:
— я заметил, что прошлый номер поста не совпадает с только что появившемся на 20-100, скорее всего это связано с тем что бот не видит новых постов
Ожидаемое поведение
Четкое и краткое описание того, что вы ожидали.
— выше
Лог-файл
Загрузите лог-файл бота, запущенного в режиме отладки (параметр --debug
).
— в консоль исправно присылаются логи о get_poste через каждые 2 часа
Ваш ПК (пожалуйста, укажите следующую информацию):
— linux 20
Дополнительная информация
Любая дополнительная информация может быть размещена здесь
— жду вопросы
Опишите ошибку
Бот не добавляет ссылки на статьи, только пишет их заголовки. Пример:
Как получить ошибку
Мой конфиг:
https://vk.com/****:
channel:
- ****
- ****
header: 'Источник: [*** ***](https://*****)'
last_id: 1585
last_story_id: 0
pinned_id: 0
settings:
admins_id:
- ********
disable_web_page_preview: true
send_reposts: true
what_to_send:
- all
Авторизация в ВК через токен
Хотелось бы делать данные настройки прямо в телеграмме.
Распишите пожалуйста что откуда брать как им пользоваться?
Опишите ошибку
После обновления, при отправке постов тг канал, начала появляться ошибка ApiError
Как получить ошибку
Шаги для воспроизведения ошибки:
Ожидаемое поведение
Отправка постов ТГ канал
Лог-файл
Загрузите лог-файл бота, запущенного в режиме отладки (параметр --debug
).
Ваш ПК (пожалуйста, укажите следующую информацию):
Дополнительная информация
bot_log_2022-11-04_06-36-44_434137.log
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.