python273 / vk_api

Модуль для создания скриптов для ВКонтакте | vk.com API wrapper
https://pypi.org/project/vk-api/
Apache License 2.0
1.33k stars 321 forks source link

Не работает event.ref и event.ref_source #479

Open d1n0z opened 1 year ago

d1n0z commented 1 year ago

Все версии самые последние Код(вставил только то что имеет отношение к проблеме т.к. файл на 2000 строк, если чего-то не дописал то сорян):

class CreateLongPoll(VkLongPoll):
    def listen(self):
        while True:
            try:
                for event in self.check():
                    yield event
            except Exception as e:
                if str(e)[1] != '<':
                    print(e, end=" FROM MAIN.PY->MyLongPoll->listen\n")

class VkBot:
    def __init__(self):
        self.vk_session = vk_api.VkApi(token=vk_token)
        self.longpoll = CreateLongPoll(self.vk_session)
        self.vk = self.vk_session.get_api()
        self.event = None
        self.db = None

    def run(self):
        while True:
            for self.event in self.longpoll.listen():
                if self.event.type == VkEventType.MESSAGE_NEW and self.event.to_me and self.event.text:
                    try:
                        self.db = utils.getOrCreateUserById(self.event.user_id)
                        link = self.vk.utils.getShortLink(url=f"{cfg.linkongroup}?ref={self.db.vk_id}")
                        print(link['url'], link['short_url'])
                        print(self.event.ref, self.event.ref_source)
                    except:
                        traceback.print_exc()

if __name__ == "__main__":
    VkBot().run()
d1n0z commented 1 year ago

Разобрался. Нужно было искать атрибуты в ответе messages.getById(message_ids=[self.event.message_id]) У меня это выглядело следующим образом: self.vk.messages.getById(message_ids=[self.event.message_id], extended=1)['items'][0]['ref'])