Giter Site home page Giter Site logo

kylmakalle / tgvkbot Goto Github PK

View Code? Open in Web Editor NEW
75.0 10.0 31.0 2.38 MB

Общайтесь в VK через Telegram бота

Home Page: https://akentev.com/tgvkbot

License: Other

Python 97.62% Dockerfile 0.32% Shell 2.06%
vk-telegram telegram vk vkontakte telegram-vk docker

tgvkbot's People

Contributors

dev7060 avatar dm1sh avatar kylmakalle avatar youlovesaturn 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tgvkbot's Issues

Неплохо

Еще бы помимо текста отправлять бы вложения, вообще было бы супер)

Псевдо LongPolling

Проблема

Для обработки сообщений из VK используется vk_messages.py, где реализован запрос к messages.getLongPollHistory с таймаутом в 3 секунды. Это влечёт за собой создание такого вот exception

  • Во-первых, такой вариант опрашивания немного неправильный, и вообще является модификацией
  • Во-вторых, приходится ставить таймаут в 3 секунды, который в некоторых случаях проигрывает нормальной настройке LongPoll по времени (а при триггере exception и подавно).

Решения

  • произвести настройку LongPolling по документации от VK, однако апдейты в виде {"ts":1820350874,"updates":[­[4,1619489,561,123456,1464958914," ... ","hello" .... придётся парсить и раскидывать по словарям, которые возвращает messages.getLongPollHistory
class VkMessage:
    def __init__(self, token):
        self.session = get_session(token)
        self.ts, self.pts, self.server, self.key = get_tses(self.session)

    def get_new_messages(self):
        api = vk.API(self.session)
        session = requests.Session()
        new = session.get('https://{}?act=a_check&key={}&ts={}&wait=25&mode=32&version=2'.format(
                self.server, self.key, self.ts))
        self.ts = new.json()['ts']


def get_session(token):
    return vk.Session(access_token=token)


def get_tses(session):
    api = vk.API(session)

    ts = api.messages.getLongPollServer(need_pts=1)
    return ts['ts'], ts['pts'], ts['server'], ts['key']
  • Использовать альтернативную библиотеку для LongPolling. Некоторые элементы возвращаемых JSON-словарей не соответствуют тем, что есть от messages.getLongPollHistory

  • Использовать альтернативную библиотеку взаимодействия с VK для ВСЕГО проекта.

Залипает бот

В какой-то момент бот перестаёт отправлять сообщения из Телеграмм в ВК в групповом чате куда он добавлен. В логах повторяющееся сообщение:
WARNING:vk_messages:Longpoll id 1: {'ts': 1723203814, 'updates': []}
Встречал такое "залипание" уже несколько раз, меняется ID сообщения но и всё. Полистал лог назад, время возникновения ошибки непонятно, повторяющиеся сообщения как выше начинаются с:
DEBUG:aiogram:Make request: 'getUpdates' with data: {'timeout': 20, 'offset': 704602229} and files {} DEBUG:aiogram:Response for getUpdates: [200] {"ok":true,"result":[]} DEBUG:aiogram:Make request: 'getUpdates' with data: {'timeout': 20, 'offset': 704602229} and files {} WARNING:vk_messages:Longpoll id 1: {'ts': 1679087997, 'updates': []} DEBUG:aiogram:Response for getUpdates: [200] {"ok":true,"result":[]} DEBUG:aiogram:Make request: 'getUpdates' with data: {'timeout': 20, 'offset': 704602229} and files {} WARNING:vk_messages:Longpoll id 1: {'ts': 1679087997, 'updates': []} DEBUG:aiogram:Response for getUpdates: [502] {"ok":false,"error_code":502,"description":"Bad Gateway"} WARNING:aiogram.dispatcher:Polling is stopped. ERROR:asyncio:Task exception was never retrieved future: <Task finished coro=<Dispatcher.start_polling() done, defined at /root/.local/lib/python3.6/site-packages/aiogram/dispatcher/__init__.py:214> exception=TelegramAPIError('Bad Gateway',)> Traceback (most recent call last): File "/root/.local/lib/python3.6/site-packages/aiogram/dispatcher/__init__.py", line 243, in start_polling updates = await self.bot.get_updates(limit=limit, offset=offset, timeout=timeout) File "/root/.local/lib/python3.6/site-packages/aiogram/bot/bot.py", line 83, in get_updates result = await self.request(api.Methods.GET_UPDATES, payload) File "/root/.local/lib/python3.6/site-packages/aiogram/bot/base.py", line 136, in request proxy=self.proxy, proxy_auth=self.proxy_auth) File "/root/.local/lib/python3.6/site-packages/aiogram/bot/api.py", line 195, in request return await _check_result(method, response) File "/root/.local/lib/python3.6/site-packages/aiogram/bot/api.py", line 119, in _check_result raise exceptions.TelegramAPIError(description) aiogram.utils.exceptions.TelegramAPIError: Bad Gateway WARNING:vk_messages:Longpoll id 1: {'ts': 1679087997, 'updates': []} WARNING:vk_messages:Longpoll id 1: {'ts': 1679087997, 'updates': []} WARNING:vk_messages:Longpoll id 1: {'ts': 1679087997, 'updates': []}

Я так понимаю 200 это ок а вот после получения 502 начинаются проблемы. Я видел что недавно был коммит на обновление:
tgvkbot#37 Bump pillow from 5.1.0 to 9.0.1 (https://github.com/Kylmakalle/tgvkbot/pull/37#issuecomment-1322934680)
но у меня Докер установка и хотя в описании бота указано что
на всякий случай фиксируются версии каждого коммита
образ Докер последний раз обновлялся 4 месяца назад.

Кодировка

Проблема с кодировкой

SyntaxError: Non-ASCII character '\xe2' in file bot.py on line 39, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

Как исправить?

Windows

Есть инструкция, как запустить в windows?
Чтобы проверить работу бота после кастомизации
В инете не могу что-то найти..

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.