Форум программистов, компьютерный форум, киберфорум
Python: API, боты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/40: Рейтинг темы: голосов - 40, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 24.12.2018
Сообщений: 8
VK API

Бот не реагирует на вступление нового участника по ссылке

13.10.2021, 02:26. Показов 8978. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно, вводные. Пишу бота для беседы ВК, используя библиотеки vk, vk_api, vk_api.longpoll. Бот исправно реагирует на заданные сообщения, отправку в беседу новых записей сообщества и прочие мелочи. Я хотел сделать так, чтобы бот реагировал на вступление в беседу нового участника - приветствовал его сообщением. И это работает, но только в тех случаях, когда нового участника кто-то приглашает (соответственно, используется объект action - chat_invite_user). Реагирует бот и на исключение участника из беседы (chat_kick_user). Но он отказывается реагировать на действие, когда новый участник вступает по ссылке (соотв. chat_invite_user_by_link). Я чувствую что проблема где-то на поверхности и крайне примитивная, но обычный загугл ничего не дал. В чем может быть проблема?

Интересующий меня фрагмент кода:
Python
1
2
3
4
5
6
7
8
9
10
11
12
id = event.chat_id
msg = event.object.message["text"].lower()
    try:
        action = event.message.action["type"]
        invite_id = event.message.action["member_id"]
    except:
        action = ""
        invite_id = -100            
if action == "chat_invite_user_by_link" or action == "chat_invite_user":
send_message(peer_id=event.chat_id, message="Привет, @id" + str(invite_id) + ". Представься и ознакомься с закрепом. Если нужна помощь, то либо напиши личное сообщение в группу, либо напиши 'помощь.'", attachment=None, keyboard=None)             
elif action == "chat_kick_user":
send_message(peer_id=event.chat_id, message="Участник исключен")
И код целиком (исключая часть с авторизацией и функциями сообщений и постов)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.10.2021, 02:26
Ответы с готовыми решениями:

Как при заходе нового участника в группу приветствовать его
Думал над тем как при заходе нового участника в группу приветствовать его, точнее чтобы это делал бот, пишу я его на C#, ищу похожий метод...

pyTelegramBotAPI Бан нового участника группы если в теч 10 мин он ничего не написал
Есть простой бот на pyTelegramBotAPI, он приветствует участников в группе, присылая им правила сообщества. Каким образом можно...

Бот в Telegram не реагирует на код c#
Здравствуйте, я тут создавал бота в телеграме, но столкнулся с проблемой, мой даже самый простой код не работает(например тот же вывод в...

18
Заяц, просто Заяц.
 Аватар для Fury67
666 / 280 / 156
Регистрация: 12.11.2017
Сообщений: 882
17.10.2021, 15:34
Хм, мне тоже стало это интересно. Еще мне кажется, что такая же проблема будет, если надо будет поймать самостоятельный выход человека из беседы.

Надеюсь, что кто-то объяснит.

Добавлено через 6 минут
Мне почему-то кажется, что это какие-то ограничения вк дает в bot_longpoll, поэтому и не получается... Но это так, пальцем в небо.
0
16 / 10 / 6
Регистрация: 15.08.2021
Сообщений: 60
17.10.2021, 17:51
Рекомендую ознакомится с существующими событиями
https://vk.com/dev/groups_events
0
Заяц, просто Заяц.
 Аватар для Fury67
666 / 280 / 156
Регистрация: 12.11.2017
Сообщений: 882
17.10.2021, 18:03
NanKol, так вопрос состоит в том, почему longpoll.listen() не улавливает события самостоятельного выхода из беседы и вступления в беседу по ссылке.
0
Заяц, просто Заяц.
 Аватар для Fury67
666 / 280 / 156
Регистрация: 12.11.2017
Сообщений: 882
18.10.2021, 11:51
Может быть данное событие надо улавливать с помощью какого-то другого метода?
0
16 / 10 / 6
Регистрация: 15.08.2021
Сообщений: 60
18.10.2021, 12:53
smarvin, взгляни
Python
1
2
3
for event in longpoll.listen():
    if event.type == VkEventType.CHAT_UPDATE:
        print(event.update_type)
Добавлено через 9 минут
Цитата Сообщение от Fury67 Посмотреть сообщение
NanKol, так вопрос состоит в том, почему longpoll.listen() не улавливает события самостоятельного выхода из беседы и вступления в беседу по ссылке.
Человек вышел, а программа реагирует только на новые сообщения или посты на стене сообщества.
0
Заяц, просто Заяц.
 Аватар для Fury67
666 / 280 / 156
Регистрация: 12.11.2017
Сообщений: 882
18.10.2021, 16:19
То есть получается метод "CHAT_UPDATE" есть только в vk_api.longpoll? А в vk_api.bot_longpoll такого метода нет, правильно? Это я для расширения своего кругозора спрашиваю

Вот это нашел в документации:
Code
1
2
3
CLASS_BY_EVENT_TYPE = {'message_edit': <class 'vk_api.bot_longpoll.VkBotMessageEvent'>, 
'message_new': <class 'vk_api.bot_longpoll.VkBotMessageEvent'>, 
'message_reply': <class 'vk_api.bot_longpoll.VkBotMessageEvent'>}
0
16 / 10 / 6
Регистрация: 15.08.2021
Сообщений: 60
18.10.2021, 17:18
Fury67, не знаю, но можно узнать
Python
1
2
3
for event in bot_longpoll.listen():
    print(event.type)
    print(event.__dict__)
0
Заяц, просто Заяц.
 Аватар для Fury67
666 / 280 / 156
Регистрация: 12.11.2017
Сообщений: 882
18.10.2021, 18:05
Цитата Сообщение от NanKol Посмотреть сообщение
но можно узнать
Я так же об этом и узнал. Поэтому возникает вопрос, в случае vk_api.bot_longpoll можно ли как-то выкрутиться, чтобы поймать эти действия или же надо использовать vk_api.longpoll?

Как мне кажется, для работы с беседами надо использовать vk_api.longpoll. А для работы непосредственно с событиями в группе надо использовать vk_api.bot_longpoll. Насколько мое предположение уместно?
0
0 / 0 / 0
Регистрация: 24.12.2018
Сообщений: 8
19.10.2021, 16:58  [ТС]
Ого, тема немного живая. Короче, я понял в чем проблема и связался с техподдержкой ВК. Проблема была в том, что для объекта типа message.action при определенных действиях должен возвращаться ответ типа {'type': ..., 'member_id': ... и т.д.}. И когда новый пользователь присоединяется по ссылке, то сервер должен возвращать ответ {'type': chat_invite_user_by_link, 'member_id': ... и т.д.}, на который уже можно отреагировать ботом. Но по какой-то причине сервер ответ не возвращает. В техподдержке сказали что знают об этой проблеме и разработчики работают над решением, но сроков не назвали.

Добавлено через 3 минуты
Я думаю что можно использовать костыли. Завести текстовый док или иную базу, куда при присоединении нового пользователя к чату, будет добавляться его id. Дальше, сравнивать id-шники в базе с id в беседе. Если в беседе стало больше на один id, то рассматриваем это событие как присоединение пользователя к конфе. Либо, если айди стало меньше, то значит это кто-то покинул конфу или получил бан.
0
Заяц, просто Заяц.
 Аватар для Fury67
666 / 280 / 156
Регистрация: 12.11.2017
Сообщений: 882
20.10.2021, 18:23
Цитата Сообщение от smarvin Посмотреть сообщение
использовать костыли
Тогда легче использовать vk_api.longpoll, где все работает.
0
16 / 10 / 6
Регистрация: 15.08.2021
Сообщений: 60
20.10.2021, 19:56
Цитата Сообщение от Fury67 Посмотреть сообщение
Как мне кажется, для работы с беседами надо использовать vk_api.longpoll. А для работы непосредственно с событиями в группе надо использовать vk_api.bot_longpoll. Насколько мое предположение уместно?
нет
Цитата Сообщение от Fury67 Посмотреть сообщение
Я так же об этом и узнал. Поэтому возникает вопрос, в случае vk_api.bot_longpoll можно ли как-то выкрутиться, чтобы поймать эти действия или же надо использовать vk_api.longpoll?
из ниже написаного нет

Добавлено через 37 секунд
Цитата Сообщение от Fury67 Посмотреть сообщение
Тогда легче использовать vk_api.longpoll, где все работает.
можно отслеживать изменения в чате, но не в самой группе

Добавлено через 2 минуты
Цитата Сообщение от smarvin Посмотреть сообщение
Если в беседе стало больше на один id, то рассматриваем это событие как присоединение пользователя к конфе.
Идея есть, но вам приходят не все уведомления о вступлении в беседу

Добавлено через 21 минуту
smarvin, Можно сделать костыль через два файла. Один файл будет основной(в котором используем user_longpolll), а второй(где уже используем bot_longpoll) импортируем в первый.
P.S.-Можно и наоборот!

Добавлено через 50 минут
Цитата Сообщение от NanKol Посмотреть сообщение
Один файл будет основной(в котором используем user_longpolll)
Токен для работы с user_longpoll подходит от сообщества вк с разрешением на сообщения
0
0 / 0 / 0
Регистрация: 24.12.2018
Сообщений: 8
22.10.2021, 16:09  [ТС]
Цитата Сообщение от Fury67 Посмотреть сообщение
Тогда легче использовать vk_api.longpoll, где все работает.
Цитата Сообщение от NanKol Посмотреть сообщение
smarvin, Можно сделать костыль через два файла. Один файл будет основной(в котором используем user_longpolll), а второй(где уже используем bot_longpoll) импортируем в первый.
В том-то и дело что не работает ничего сейчас и это проблемы со стороны сервера ВК. Ну хотя конкретно сейчас может и работает, я давно не проверял.
0
Заяц, просто Заяц.
 Аватар для Fury67
666 / 280 / 156
Регистрация: 12.11.2017
Сообщений: 882
22.10.2021, 17:19
Цитата Сообщение от smarvin Посмотреть сообщение
В том-то и дело что не работает ничего сейчас и это проблемы со стороны сервера ВК.
Когда писал предыдущее сообщение, проверял.
0
16 / 10 / 6
Регистрация: 15.08.2021
Сообщений: 60
22.10.2021, 18:59
Цитата Сообщение от smarvin Посмотреть сообщение
В том-то и дело что не работает ничего сейчас и это проблемы со стороны сервера ВК. Ну хотя конкретно сейчас может и работает, я давно не проверял.
всё работает также как и когда вы задавали вопрос в тех поддержку!
0
0 / 0 / 0
Регистрация: 24.12.2018
Сообщений: 8
23.10.2021, 17:00  [ТС]
Цитата Сообщение от NanKol Посмотреть сообщение
всё работает также как и когда вы задавали вопрос в тех поддержку!
Цитата Сообщение от Fury67 Посмотреть сообщение
Когда писал предыдущее сообщение, проверял.
Еще раз. В беседах не работает событие "chat_invite_user_by_link" - оно не приходит в беседу, его не видит Long Poll, что подтверждается выводом на печать командой print(event.message.action["type"]) при каждом новом событии. То что оно не работает подтвердила техподдержка Вконтакта, скрин прикрепляю.
Миниатюры
Бот не реагирует на вступление нового участника по ссылке  
0
16 / 10 / 6
Регистрация: 15.08.2021
Сообщений: 60
23.10.2021, 18:54
smarvin, кхм...
код
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
import vk_api
from vk_api.longpoll import VkLongPoll, VkEventType
 
token = "токен со всеми правами"
 
vk = vk_api.VkApi(token=token)
longpoll = VkLongPoll(vk)
a = 1
for event in longpoll.listen():
    print(a)
    a = a + 1
    print(event.type)
    print(event.__dict__)
вывод
Python
1
2
VkEventType.CHAT_UPDATE
{'raw': [52, 6, 2000000002, 468333061], 'from_user': False, 'from_chat': True, 'from_group': False, 'from_me': False, 'to_me': False, 'attachments': {}, 'message_data': None, 'message_id': None, 'timestamp': None, 'peer_id': 2000000002, 'flags': None, 'extra': None, 'extra_values': None, 'type_id': 6, 'type': <VkEventType.CHAT_UPDATE: 52>, 'info': {'user_id': 468333061}, 'chat_id': 2, 'update_type': <VkChatEventType.USER_JOINED: 6>}
Цитата Сообщение от smarvin Посмотреть сообщение
Я хотел сделать так, чтобы бот реагировал на вступление в беседу нового участника - приветствовал его сообщением.
Это вполне можно реализовать
Цитата Сообщение от smarvin Посмотреть сообщение
В беседах не работает событие "chat_invite_user_by_link"
Возможно
Цитата Сообщение от smarvin Посмотреть сообщение
оно не приходит в беседу
Тут не понятно чего вы хотите конкретно
Цитата Сообщение от smarvin Посмотреть сообщение
его не видит Long Poll
Мне кажется видет, но реагирует возможно не так как должен
0
0 / 0 / 0
Регистрация: 24.12.2018
Сообщений: 8
23.10.2021, 21:06  [ТС]
Цитата Сообщение от NanKol Посмотреть сообщение
Тут не понятно чего вы хотите конкретно
Да в принципе я уже ничего не хочу. Дождусь пока разработчики починят это событие, вот и все. Спасибо за внимание к теме!
0
Заяц, просто Заяц.
 Аватар для Fury67
666 / 280 / 156
Регистрация: 12.11.2017
Сообщений: 882
23.10.2021, 22:40
Цитата Сообщение от smarvin Посмотреть сообщение
его не видит Long Poll
Его не видит bot_longpoll, а longpoll его видит. Тебе это подтвердили сообщением выше:
Цитата Сообщение от NanKol Посмотреть сообщение
'update_type': <VkChatEventType.USER_JOINED: 6>}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.10.2021, 22:40
Помогаю со студенческими работами здесь

Бот не реагирует на команду /start
Здравствуйте, нужна помощь. Учусь писать телеграм-бота на Python, в кодовом редакторе PyCharm. При запуске ошибок не выдает, но сам бот...

Телеграмм-бот не реагирует на markup
Пользуюсь telebot. Делаю бота для поиска беседок. Перестал реагировать на последний markup. Только начала изучать, помогите по-братски. ...

Бот не реагирует на команду инфо
Такая проблема, код написан, но сам бот не реагирует на команду инфо import telebot import configure from telebot import types ...

Бот работает, но на сообщения не реагирует
Код работает, ни каких критических ошибок не выдаёт, выключается так же без проблем и ошибок, но на сообщения не отвечает, хотя префикс и...

Бот не сразу реагирует на команды
Использую bot.register_next_step_handler() для исполнения команд. Все функции выполняются кроме одной (вставленный кусок кода). Она...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru