Задать вопрос

Упоминание пользователя в сообщении. Вк бот?

Создаю бота для вк. Пока что учу основы, но я не разобрался, как сделать так, чтобы бот упоминал пользователя: в строчке send_message(vk, 'user_id', event.user_id, message= 'Приветствую, {упоминание пользователя}! Напиши "Помощь"')

Подскажите, как это сделать. Нужно именно чтобы высвечивалось в сообщении имя пользователя, а при нажатии перекидывало на его страницу
import sys
sys.path.insert(0, '../')

from vk_api.longpoll import VkLongPoll, VkEventType
from vk_api.keyboard import VkKeyboard, VkKeyboardColor
import vk_api
from datetime import datetime
import random
import os
import time

# DEFAULT, NEGATIVE, POSITIVE, PRIMARY
# API-ключ созданный ранее
token = "секрет"

# Авторизуемся как сообщество
vk = vk_api.VkApi(token=token)

longpoll = VkLongPoll(vk)

def create_keyboard(response):
    keyboard = VkKeyboard(one_time=False)

    if response == 'помощь':

        keyboard.add_button('Привет', color=VkKeyboardColor.POSITIVE)


    elif response == 'закрыть':
        print('закрываем клавиатуру')
        return keyboard.get_empty_keyboard()

    keyboard = keyboard.get_keyboard()
    return keyboard


def send_message(vk, id_type, id, message=None, keyboard=None, rar=None):
    vk.method('messages.send',{id_type: id, 'message': message, 'random_id': random.randint(-2147483648, +2147483648), 'keyboard': keyboard, 'rar' : rar})

def get_user_info(user_id):
    return vk.method('users.get', {'user_ids': user_id})

for event in longpoll.listen():
    if event.type == VkEventType.MESSAGE_NEW:
        print('Сообщение пришло в: ' + str(datetime.strftime(datetime.now(), "%H:%M:%S")))
        print('Текст сообщения: ' + str(event.text))
        print('Сообщение от пользователя: ' + str(event.user_id))
        response = event.text.lower()
        keyboard = create_keyboard(response)

        if event.from_user and not event.from_me:
            if response == "начать": #НАЧАТЬ
                send_message(vk, 'user_id', event.user_id, message= 'Приветствую, {упоминание пользователя}! Напиши "Помощь"')

            elif response=='закрыть':
                send_message(vk, 'user_id', event.user_id, message='Закрываю клавиатуру',keyboard=keyboard)
  • Вопрос задан
  • 1537 просмотров
Подписаться Простой Комментировать
Решения вопроса 1
WolfInChains
@WolfInChains
Получаете имя
def get_name(uid: int) -> str:
    data = vk.method("users.get", {"user_ids": uid})[0]
    return "{} {}".format(data["first_name"], data["last_name"])

Далее в строку отправки сообщения вставляете
f"Приветствую [id{event.user_id}|{get_name(event.user_id)}]"
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
limontasher
@limontasher
Начинающий программист
Приветствую, для начала, чтобы просто упомянуть пользователя в диалоге нужно прописать: [id267698587|Имя Фамилия]
Теперь вам нужно добавить 'id' к event.user_id, затем получить имя и фамилию пользователя, лично я делаю это так:
getting = vks.get_api()
nam = getting.users.get(user_ids=senders, fields='first_name')[0]['first_name']
fam = getting.users.get(user_ids=senders, fields='last_name')[0]['last_name']
fname = nam + ' ' + fam

#и затем все складываем:

senders = event.message.get("from_id")
sender = event.chat_id
idus = 'id' + str(senders)

wrsms(sender, '[' + idus + ('|') + fname + ']') #вызов функции для отправки сообщения

Удачной разработки на языке python!
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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