Некорректная отправка сообщений через vk api на Python
Возникла проблема с vk api. Написал тестовую программу, которая должна просто дублировать сообщения пользователя. Для отправки сообщения использовал метод messages.send(). Дело в том, что при отправке сообщения, программа вступает в бесконечный цикл, начиная просто спамить сообщениями, который писал пользователь. При чём, если сообщений было несколько, то они отсылаются по очереди в таком же бесконечном цикле. (Код почти полностью скопирован из Интернета)
Код:
import vk_api
from vk_api.longpoll import VkLongPoll, VkEventType
from vk_api.utils import get_random_id
def write_mes(sender, message):
authorize.method('messages.send', {'user_id': sender, 'random_id': get_random_id(), 'message': message})
token = "..."
authorize = vk_api.VkApi(token = token)
longpoll = VkLongPoll(authorize)
for event in longpoll.listen():
if event.type == VkEventType.MESSAGE_NEW and event.text:
mes = event.text
sender = event.user_id
write_mes(sender, mes)
print(mes + " id" + str(sender))
Ответы (1 шт):
Я не доверяю библиотечным методам в данном случае, но, думаю ошибка здесь в том, что вы не обновляете ts лонгпола.
def get_long_poll_server(self):
return self.vk.method('messages.getLongPollServer')
def updates(self):
server = self.get_long_poll_server()
while True:
data = json.loads(requests.get(
'https://{server}?act=a_check&key={key}&ts={ts}&wait=25&mode=2&version=2'.format(
server=server['server'],
key=server['key'],
ts=server['ts'])).text)
if data.get('failed'):
...
server['ts'] = data['ts'] # IMPORTANT MOMENT
Что такое вообще ts?
ts есть timestamp. Если быть точным, то количество секунд прошедших с 01.01.1970.
Когда вы делаете запрос на сервер ВК о получении событий через LongPoll, то посылаете с какого момента получать обновления.
И если не менять ts после каждой обработки, то вы будете получать новые события + события, которые произошли после этого самого ts.