r_id = datetime.timestamp(datetime.now())
def write_msg(user_id, message):
vk_session.method('messages.send', {'user_id': user_id, 'message': message, 'random_id': r_id}) # r_id - всегда разный
def get_msg(user_id):
msg = vk_session.method('messages.getHistory', {'out': 0, 'count': 1, 'time_offset': 0, 'user_id': user_id})
return msg
vk_session = vk_api.VkApi(token=api_key)
vk = vk_session.get_api()
lp = VkLongPoll(vk_session)
for event in lp.listen():
if event.to_me:
msg_values = get_msg(event.user_id)
print(msg_values)
msg_user = msg_values['items'][0]['text']
print(msg_user)
if msg_user == '1':
write_msg(event.user_id, 'hello')
elif msg_user == '2':
write_msg(event.user_id, 'bye')
bot只回复消息1次,也就是说,如果我在对话框中写“1”,它会回复,然后我写“2”,它没有回复,虽然调试显示消息已经到达。
UPD:我直接用 VKontakte api 发明了轮子,问题出在 messages.send 方法中,由于某种原因它只能工作 1 次。也许还有其他事情需要传递给他,请告诉我。
random_id
您的代码中的(r_id
) 被初始化一次,因此在会话中发送第一条消息后,VK 会考虑后续重复项并且不处理它们。直接在函数中生成,
r_id
以便每条消息都是唯一的: