@Fliers

Как справиться с периодической неотправкой сообщений при использовании vk_api?

Я новичок в программировании на питоне, прохожу скачанный курс где нужно сделать бота, отвечающего от имени группы с использованием Python и библиотеки vk_api. Столкнулся с проблемой, что если просто написать
self.rani = random.randint(0, 2 * 20)
jj = self.g.messages.send(peer_id=chel, random_id=self.rani, message="Как тебя зовут?")
то отправляется каждое сообщение хоть из двадцати, всё работает нормально.
А если я хочу писать сообщение пользователю в ответ на его сообщение, примерно так
class Bot:
def __init__(self,grid,token):
self.grid=grid
self.token=token
self.vk=vk_api.VkApi(token=self.token)
self.vkblp=vk_api.bot_longpoll.VkBotLongPoll(vk=self.vk, group_id=self.grid)
self.g=self.vk.get_api()

def run(self):
for b in self.vkblp.listen():
if b.type==vk_api.bot_longpoll.VkBotEventType.MESSAGE_NEW:
chel = b.message["from_id"]
texts = b.message["text"]
self.rani = random.randint(0, 2 * 20)
print("привет")
jj=self.g.messages.send(peer_id=chel,random_id=self.rani,message="Как тебя зовут?"),

то отправляется одно сообщение из двух-трёх, если я делаю более сложную структуру ответов бота, то тоже процентов 40 отправляется. Причём когда сообщение пользователю вконтакте не отправляется, бот всё равно видит что от пользователя изначальное сообщение пришло, и программа идёт по пути отправки и печатает print("привет") на консоль, просто за этим (иногда) не следует отправка сообщения пользователю. Сообщения от пользователя приходят не часто (раз в несколько секунд) Проблема с self.vkblp.listen() и пробовать это же но без библиотеки с обращением к апи вконтакте напрямую?

Проблема решена!
Решением явилась замена отправки сообщений с варианта который я использовал:
vk=vk_api.VkApi(token=self.token)
g=self.vk.get_api()
g.messages.send(.......)
на вариант, который предложил RINAMI:
vk=vk_api.VkApi(token=self.token)
vk.method("messages.send", {....})
Остальное всё у меня сразу заработало без проблем, спасибо большое за помощь.
  • Вопрос задан
  • 49 просмотров
Решения вопроса 1
@RINAMI
Занимаюсь монтажом и дизайном. PSD,AEX,VEG.
Толком не понял чего вы хотите, но чтобы отправить сообщение от имени группы пользователю, нужно чтобы он написал вам первым, а так, вот написал вам скрипт простого бота:
import vk_api
token = ""
id_group = айди_группы
vk = vk_api.VkApi(token=token)
longpoll = VkBotLongPoll(vk, id_group)
getting_api = vk.get_api()

def otpravitel(id, message):
      vk.method("messages.send", {"user_id": id, "message": text, 'random_id': 0})

while True:
     for event in longpoll.listen():
        if event.type == VkBotEventType.MESSAGE_NEW:
          if event.from_user:
             id = event.object.message['from_id']
             mes = event.object.message['text']
             if mes == 'Привет, как дела?'
                otpravitel(id, 'Привет, отлично, у тебя?')
             else:
                otpravitel(id, 'Я не понял вас')
     continue

Зачем столь напрягаться если просто можно взглянуть в документацию? Или посмотреть роликов на ютубе?
P.S советую использовать BotsLongPoll для работы ТОЛЬКО в беседах, UserLongPoll для пользователей.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы