E
E
Evgeny Usoltsev2020-09-03 00:27:04
Python
Evgeny Usoltsev, 2020-09-03 00:27:04

Mentioning a user in a message. Vk bot?

I create a bot for VK. So far I'm learning the basics, but I haven't figured out how to make the bot mention the user: in the line send_message(vk, 'user_id', event.user_id, message= 'Hi, {mention user}! Write "Help"'

) , how to do it. It is necessary that the user name be displayed in the message, and when clicked, it will redirect to his page

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)

Answer the question

In order to leave comments, you need to log in

2 answer(s)
W
WolfInChains, 2020-09-03
@Evgesha47

Get a name

def get_name(uid: int) -> str:
    data = vk.method("users.get", {"user_ids": uid})[0]
    return "{} {}".format(data["first_name"], data["last_name"])

Next, in the line for sending the message, insert
f"Приветствую [id{event.user_id}|{get_name(event.user_id)}]"

M
Mikhail Muntyan, 2020-09-03
@limontasher

Greetings, to start, to just mention the user in the dialog you need to write: [id267698587|FirstName LastName]
Now you need to add 'id' to event.user_id, then get the user's first and last name, personally I do it like this:

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 + ']') #вызов функции для отправки сообщения

Happy python development!

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question