Code Monkey home page Code Monkey logo

tg_autoposter's Introduction

Metrics

tg_autoposter's People

Contributors

qwertyadrian avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tg_autoposter's Issues

Скрипт

Добрый день, подскажите пожалуйста, никак не могу со скриптом разобраться, вроде все данные заполнил, но при запуске в логах появляется такая ошибка, как можно исправить?
12

переменная в footer

Идея улучшения
Добрый день, возможно ли как то по простому добавить автора поста через footer сообщения, вывести переменную?
Пробовал $user, это не работает.

Вместо GIF сделать mp4

Здравствуйте а возможно скачивать с вк не gif?
Так как через браузер можно сохранить как видео, так как если в одном посту есть много текста плюс картинки плюс 1-2 gif то получается это все не 1 сообщением в TG а в 4
Первое сообщения это большой текст (но тут я понимаю ограничения телеграма и возможно с покупкой премиум это решиться)
Второе сообщения это картинки (так как если пост больше сколько то символов вместе с вложениями просит купить премиум)
Третий пост это GIF ну и 4 пост вторая GIF
Но вот если это видео то можно сразу загружать в один пост вместе с картинками.
Как по это лучший вариант

Ошибка постинга

Все работало а вчера упало в ошибку

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

PytzUsageWarning

Опишите ошибку
При запуске скрипта: 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

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

  • OS: Debian 10
  • Python Version: 3.7.3
  • Версия бота 3.4
  • Источник установки: GitHub.

Автопостинг по ключевым словам

Не нашел в описании настройку автопостинга по ключевым словам, т.е. автопост только тех постов, в которых есть упоминание описанных ключевых слов. Имеется ли здесь такая возможность или может быть планируется добавить?

Бот публикует предложку группы сразу на стену (при использовании LongPoll)

Опишите ошибку
Бот публикует предложку группы сразу на стену

Как получить ошибку
Шаги для воспроизведения ошибки:

  1. Тестовая группа-страница с предложкой
  2. Создать ключ сообщества LongPoll со всеми правами и вписать в конфиг
  3. Запустить бота
  4. С левой страницы попробовать что-то написать в предложку группы
  5. Бот опубликует это сообщение в телеграме

Ожидаемое поведение
Не хотелось бы, чтобы бот отправлял предложку без моего разрешения

Лог-файл
Загрузите лог-файл бота, запущенного в режиме отладки (параметр --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

Дополнительная информация

bug

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

доброго времени суток! бот даже не включается, выводя вот это безобразие. что делать?

Несколько замечаний

А есть ли возможность доставать из постов не ссылки на видео 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

Ошибка получения постов: [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] Проверка завершена

Пост не дублируется в канал Telegram, если в оригинальном посте VK присутствует embedded YouTube Video URL

Опишите ошибку

  • Пост не дублируется в канал Telegram, если в оригинальном посте VK присутствует embedded на YouTube Video URL
  • Пост на канале Telegram создаётся, но без какого-либо встроенного видео
  • Клиент TG_AutoPoster.py вылетает, Трейсбэк прилагаю

Как получить ошибку
Создать пост со встроенной ютуб ссылкой
Пост с ссылкой на ютуб видео в 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: ''

image

Как должно быть

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

image

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

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

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

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

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

  • OS: Docker [Standalone20.10.3]
    what_to_send = text,link,photo,polls
    stop_list = stop.ini
    posts_count = 5

[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 последних постов

Приветствую а есть возможность обойти ограничения в 100 последних постов из группы?
Если нужно достать все посты за пару лет последних, может каким то циклом пробегаться или api вк не даст?

Реализация вывода кнопки со ссылкой на комментарии

Идея улучшения
при использовании inline keyboard пропадает кнопка комментирования в самом телеграмме. Может реализовать дополнительную кнопку для перехода к комментированию. Так же в идеале сделать параметр в конфиге отвечающий за отображение кнопки, так как не всегда к каналу привязан чат для комментирования.

Функция мульти-аккаунт

Так как есть ограничения в запросах у вк, предлагаю добавить возможность добавлять более 1-2 аккаунтов ВК.
Я точно не знаю возможно ли это, но для более массового пользования самое то.

Суть: не использовать один аккаунт для запроса, постоянно перебирая аккаунты и с них посылать запрос. Допустим устанавливаем определенный лимит в 1000 запросов, как только он достигает этого верха, переключаемся на другой аккаунт, дабы избежать заморозки и так в определенном порядке (или рандоме)

Альбомы

Если на стене группы находится просто альбом в котором условно 20-50 фото то бот постит в тг лишь ссылку на него, было бы не плохо что бы он и это умел парсить в несколько постов подрят

Путь для конфиг файла config.yaml

Приветсвую, задам нубский вопрос. Так и не смог понять где именно нужно создавать файл конфигурации из инструкции config.yaml
Подскажите путь.

Преобразование логинов в id в ВК-ссылках

Сейчас можно дать боту ссылку формата https://vk.com/vk. Это запись ссылки с логином группы, который может меняться. Наверное через апи вк можно получать id группы (у этой - club22822305) и автоматически в конфиги сохранять ссылки в формате https://vk.com/club22822305, чтобы не менять конфиг при изменении красивой ссылки на группу

Проверка валидности источников

Возможность делать проверку валидности всех источников постов в боте, что-бы можно было вычислить заблокированные/приватные группы.
(Как я понял, сейчас если есть заблокированная/приватная группа в списке, то при начале проверки постов, если бот напирается на эту группу, дальше стопается вся проверка постов)

Сделать например командой: /check, или запускать проверку раз в сутки и отправлять уведомление в бота.

Doesn't match a supported version!

/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!

Connection timed out

Последние дня 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 суток по настройке в конфиге.

Пример: в бота посылается пост из привязанного канала, бот выдает данные по посту (группу, ссылку на пост)

не запускается контейнер

Опишите ошибку
не запускается контейнер, просит модуль 'крипто'

Как получить ошибку
Шаги для воспроизведения ошибки:

  1. запуллить docker pull qwertyadrian/tg_autoposter:master
  2. заранить docker run -it --name tgautoposter -v /root:/data 3ab97fb78456
  3. получить
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.

Опишите ошибку
В какой-то момент бот перестает репостить новые сообщения. В логах повторяется "socket.send() raised exception." без подробностей, ресарт контейнера решает проблему.

Как получить ошибку
Шаги для воспроизведения ошибки: неизвестно

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

  • OS: Docker Image, latest
  • Источник установки Docker Hub
  • Приложите файл конфигурации бота
  • ID группы (пользователя) и ID проблемного поста: https://vk.com/wall-154341181_7686 но пост каждый раз разный. В предыдущий раз это был https://vk.com/wall-154341181_7623 и общего у них только то что они в одной группе.

Дополнительная информация
config без токенов.yaml.txt

stop.ini
#storm08travel

Может как-нибудь заставить контейнер писать в папку с конфигом подробный лог? хоть будет понятно в какой момент случился затык, последний строчки все одинаковые.

Добавить подпись источника поста

Хотелось бы сообщения из некоторых источников подписывать. Первой строчкой в сообщении название группы, из которой пост. Можно через телеграмовское форматирование сразу ссылку прятать внутри названия.

Не работают репосты

Когда группа делает репост, Autoposter не видит его

Как получить ошибку

  1. Делаем репост в группе
  2. Пишем в конфиге id поста за несколько постов до целевого
  3. Запускаем
  4. Приходят все посты, кроме последнего (с репостом). В конфиге как id_last запишется id последнего поста без репостов

ПК

  • Zorin OS 16 (основан на Ubuntu)
  • Python 3.8.10
  • Ссылка на группу, в которой пытался https://vk.com/project__it.
  • Последний раз пробовал на посте 639

Соединение

Можешь по править и добавить проверки на соединение, когда на пример сервер не может достучаться до вк или отправить в тг пост, падает с ошибкой.
Что бы он какое то время спал и пробовал снова
Бывают ситуации когда сервер теряет интернет в момент проверки и дальше он зависает, даже если в sh стоит повторная проверка через 60 секунд.

Ошибка больше 100 постов

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'

режим loop для Docker

Идея улучшения*
Сейчас скрипт может работать "по кругу" благодаря аргументам -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") при попытке отправки поста, содержащего две или более гифки.

Как получить ошибку
Шаги для воспроизведения ошибки:

  1. Создать пост с двумя или более гифками
  2. Запустить бота
  3. See error

Ожидаемое поведение
Репост всех гифок друг за другом

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

  • OS: Linux Mint 20.3
  • Python Version: 3.8.10
  • Версия бота: 3.1.1
  • Источник установки: GitHub
  • Приложите файл конфигурации бота: config.yaml.txt
  • ID группы (пользователя) и ID проблемного поста: https://vk.com/wall-199773586_39

Ошибка: CERTIFICATE_VERIFY_FAILED. Self signed certificate in certificate chain

Опишите ошибку
До сегодняшнего дня работало отлично.
Утром запустил и получил ошибку 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)>

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

  • OS: [Windows]
  • Python Version: [3.11.1]
  • Версия бота [e.g. 3.5.0]
  • Источник установки (GitHub)

Все в одном посте

Текущая реализация
Если пост, имеет текст и альбом (несколько изображений), то вывод текста идет отдельным сообщениям от медиа.
пример

Идея улучшения
Если пост, имеет текст и альбом (несколько изображений), то вывод текста прикреплять к первому изображению.

bug'ованый

Опишите ошибку
Четкое и краткое описание того, что произошло.

— после примерно 24 часов исправной работы бот не пересылает новые посты

Как получить ошибку
Шаги для воспроизведения ошибки:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

— я заметил, что прошлый номер поста не совпадает с только что появившемся на 20-100, скорее всего это связано с тем что бот не видит новых постов

Ожидаемое поведение
Четкое и краткое описание того, что вы ожидали.

— выше

Лог-файл
Загрузите лог-файл бота, запущенного в режиме отладки (параметр --debug).

— в консоль исправно присылаются логи о get_poste через каждые 2 часа

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

  • OS: [e.g. Windows]
  • Python Version: [e.g. 3.6]
  • Версия бота [e.g. 3.2.0]
  • Источник установки (GitHub, PyPI, Docker Hub)
  • Приложите файл конфигурации бота
  • Ссылка на проблемный пост

— 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

Авторизация в ВК через токен

How install that?

Распишите пожалуйста что откуда брать как им пользоваться?

Ошибка

Опишите ошибку
После обновления, при отправке постов тг канал, начала появляться ошибка ApiError

Как получить ошибку
Шаги для воспроизведения ошибки:

  1. Go to 'Запуск скрипта'
  2. Click on 'Ожидание отправки постов'
  3. Scroll down to 'Ошибка'
  4. See error

Ожидаемое поведение
Отправка постов ТГ канал

Лог-файл
Загрузите лог-файл бота, запущенного в режиме отладки (параметр --debug).

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

  • OS: [Windows]
  • Python Version: [3.8]
  • Версия бота [e.g. 3.3.1]
  • Источник установки (GitHub)
  • Приложите файл конфигурации бота
  • Ссылка на проблемный пост

Дополнительная информация
bot_log_2022-11-04_06-36-44_434137.log

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.