Задать вопрос
@CleRleQ
Учусь программированию, люблю игры.

Как получить id пользователя с помощью vk_api & longpoll в беседе вк, на Python?

Всем привет.

Яп: Пайтон
Vk_api
Longpoll

Вообщем, нужна функция которая сможет получить id пользователя в беседе(желательно по сообщению).
Создаю бота на вк и вот сложность в том, что сейчас он принимает только т.е если кто-то напишет боту "профиль" , то высветиться мой профиль. т.к from_id постоянно имеет значение с конкретно моим id. Вот как достать этот id, думаю над этим уже второй день... и в документацию лез, и вопросы искал похожие... Думаю вы поняли мою мысль...

У меня получалось нечто подобное:

def get_id(user_id):
    if reseived_message == "id":
        vk.users.get('message.send', {'users_ids': user_id})
        print(user_id)


reseived_message - переменная с сообщением пользователя:
вот часть кода где находилась фукция:

for event in longpoll.listen():
    if event.type == VkBotEventType.MESSAGE_NEW and event.from_chat and event.message.get('text') !="":

        reseived_message = event.message.get('text'.lower())
        sender = event.chat_id

        if 'ку' in str(reseived_message) or 'привет' in str(reseived_message):
            write_message(sender, "Добрый день" + " " + take_name(from_id=573881719) + "!")


Спасибо.
  • Вопрос задан
  • 2435 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
@RINAMI
Занимаюсь монтажом и дизайном. PSD,AEX,VEG.
О боже, что я только что увидел, господа, запомните раз и навсегда: VkLongPoll- ТОЛЬКО для работы в ЛС, BotsLongPoll - в беседе. Еще, если вы хотите сделать профиль для каждого пользователя, то вам нужна база данных, (смотря что хотите написать в профиль)
Пример реализации того чего вы хотите на BotsLongPoll:
import time
get_name(from_id):  # Имя Фамилия пользователя
    if from_id > 0:
        sender_info = getting_api.users.get(user_ids=from_id)[0]
        full_name = sender_info.get('first_name') + ' ' + sender_info['last_name']
        return full_name
        pass
def profilesender(id, text)
      vk.method('messages.send', {'chat_id': id, 'message': text, 'random_id': 0})
def chatsender(id, text):
      vk.method('messages.send', {'chat_id': id, 'message': text, 'random_id': 0})
for event in longpoll.listen():
    if event.type == VkBotEventType.MESSAGE_NEW:
       if event.from_chat:
          user_id = event.object.message['from_id']
          mes = event.object.message['text']
          if mes == 'профиль':
             vremya = '⏰Текущее время беседы:⏰\n'  + str(time.asctime()) + '\n'
             chat = event.chat_id + '\n' #можете указать ид вашего чата
             user_name = get_name(from_id)
             chatsender(id, 'Вот ваш профиль\n' + '@id' + user_id)
             profilesender(id, 'Имя:' + user_name + '\n' + vremya + chat +)

P.S я незнаю что вы хотите добавить в профиль пользователя, но это был пример, вообще, для этого нужно создать класс, но если вы хотите узнать айди пользователя, не нужно создавать функцию, достаточно написать:
event.object.message['from_id']
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@CleRleQ Автор вопроса
Учусь программированию, люблю игры.
Добрый день. Благодарю за ответ. Но у меня осталась пара вопросов:
1) что делает - [0]
sender_info = getting_api.users.get(user_ids=from_id)[0]

2) и правильно ли я понял что:
Тут мы выводим айди:
chatsender(id, 'Вот ваш профиль\n' + '@id' + user_id)

а тут получаем:
def chatsender(id, text):
      vk.method('messages.send', {'chat_id': id, 'message': text, 'random_id': 0})

??
3) и почему мы не могли использовать одну функцию? просто вызвал ее с разными параметрами:
chatsender(id, 'Вот ваш профиль\n' + '@id' + user_id)
chatsender(Код с именем и временем)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы