@loadi

Как заставить бота читать сообщения из конфы?

Этот код отправляет сообщения в конфу номер 9, но если кто-то другой(вне конфы номер 9) напишет "/hello", то бот среагирует на его команду. Как сделать так, что бы бот слушал команды только внутри чата ?

import time
import vk_api
vk = vk_api.VkApi(login = 'login', password = 'password')
vk.auth()
values = {'out': 0,'count': 100,'time_offset': 60}

def write_msg(chat_id, s):
    vk.method('messages.send', {'chat_id':chat_id,'message':s})

while True:
    response = vk.method('messages.get', values)
    if response['items']:
        values['last_message_id'] = response['items'][0]['id']
    for item in response['items']:
            if response['items'][0]['body'] == '/hello': 
                write_msg(9,'Привет')
    time.sleep(1)
  • Вопрос задан
  • 656 просмотров
Решения вопроса 1
@sakost
Начинающий недопрограммист на python.
Юзаю либу vk(с недавних пор свою собственную)
import vk, time

session = vk.AuthSession(user_login='<user login>', user_password='<user password>', app_id='<app id>') # может не сработать, сразу пихай в vk.Session token, чтобы не заморачиваться, а лучше юзай либу vkAPI(позже залью в PyPI)
api = vk.API(session, v='5.68')
values = {'out': 0,'count': 100,'time_offset': 60}

def write_msg(chat_id, s):
    api.messages.send(**{'chat_id':chat_id,'message':s}))

while True:
    response = api.messages.get(**values)
    if response['items']:
        values['last_message_id'] = response['items'][0]['id']
    for item in response['items']:
            if (item['body'] == '/hello') and (int(item['chat_id']) == 9): 
                write_msg(9,'Привет')
    time.sleep(1)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
userfordownload
@userfordownload
У вас реализовано через Callback API?
Там слушаются все события.

Слушаем событие message_new - новое входящее сообщение
Сканируем параметр chat_id (integer) - идентификатор беседы (ВАШЕЙ БЕСЕДЫ).
Если он совпадет - отвечаем) нет - ничего не делаем)
Ответ написан
Ваш ответ на вопрос

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

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