progserega / MatrixVkBot

Bridge-bot for send and recieve VK.com messages in matrix (matrix.org).
Other
18 stars 4 forks source link

Не приходят сообщения #23

Closed FreeApp2014 closed 4 years ago

FreeApp2014 commented 4 years ago

Ubuntu 18.04.4, python 3.8, комнаты создаются, сообщения уходят, но ничего не приходит с ошибками


2020-06-13 17:30:00,908 - MatrixVkBot - bot.py:2073 - start_vk_polls() ERROR - exception at execute start_vk_polls()
2020-06-13 17:30:10,919 - MatrixVkBot - bot.py:1916 - check_bot_status() DEBUG - =start function=
2020-06-13 17:30:10,923 - MatrixVkBot - bot.py:1895 - main() DEBUG - step 4
2020-06-13 17:30:10,924 - MatrixVkBot - bot.py:2027 - start_vk_polls() DEBUG - =start function=
2020-06-13 17:30:10,925 - MatrixVkBot - bot.py:2031 - start_vk_polls() DEBUG - try lock() before access global data()
2020-06-13 17:30:10,926 - MatrixVkBot - bot.py:2033 - start_vk_polls() DEBUG - success lock() before access global data
2020-06-13 17:30:10,929 - MatrixVkBot - bot.py:2072 - start_vk_polls() ERROR - Traceback (most recent call last):
  File "./bot.py", line 2036, in start_vk_polls
    exit_flag=data["users"][user]["vk"]["exit"]
KeyError: 'exit'

2020-06-13 17:30:10,930 - MatrixVkBot - bot.py:2073 - start_vk_polls() ERROR - exception at execute start_vk_polls()```
FreeApp2014 commented 4 years ago

Короче, я не претендую что это фундаментальное решение, но он у меня заработал после того как добавил data["users"][user]["vk"]["exit"] = True в эксепшн под этой функцией, потом вылезла ошибка функции get_new_vk_messages_v2, ее пофиксил поменяв в ts=data["users"][user]["vk"]["ts"] ts на ts_polling

progserega commented 4 years ago

KeyError: 'exit'

Вроде поправил (накатил в текущий master):

diff --git a/bot.py b/bot.py
index 473cf74..2aecd33 100755
--- a/bot.py
+++ b/bot.py
@@ -83,6 +83,7 @@ def process_command(user,room,cmd,formated_message=None,format_type=None,reply_t
       data["users"][user]["rooms"]={}
     if "vk" not in data["users"][user]:
       data["users"][user]["vk"]={}
+      data["users"][user]["vk"]["exit"]=False
     if room not in data["users"][user]["rooms"]:
       data["users"][user]["rooms"][room]={}
       data["users"][user]["rooms"][room]["state"]="listen_command"

А вот тут:

потом вылезла ошибка функции get_new_vk_messages_v2, ее пофиксил поменяв в ts=data["users"][user]["vk"]["ts"] ts на ts_polling

хорошо бы логи, чтобы точнее понять где ошибка :-(

FreeApp2014 commented 4 years ago

А вот тут:

потом вылезла ошибка функции get_new_vk_messages_v2, ее пофиксил поменяв в ts=data["users"][user]["vk"]["ts"] ts на ts_polling

хорошо бы логи, чтобы точнее понять где ошибка :-(

2020-06-13 18:28:47,491 - MatrixVkBot - bot.py:618 - get_new_vk_messages_v2() DEBUG - 
2020-06-13 18:28:47,492 - MatrixVkBot - bot.py:755 - get_session() DEBUG - =start function=
2020-06-13 18:28:47,493 - MatrixVkBot - bot.py:620 - get_new_vk_messages_v2() DEBUG - session=
2020-06-13 18:28:47,494 - MatrixVkBot - bot.py:621 - get_new_vk_messages_v2() DEBUG - <vk.api.Session object at 0x7f674f2648b0>
2020-06-13 18:28:47,494 - MatrixVkBot - bot.py:628 - get_new_vk_messages_v2() DEBUG - try exec api.messages.getLongPollHistory()
2020-06-13 18:28:47,495 - MatrixVkBot - bot.py:679 - get_new_vk_messages_v2() ERROR - Traceback (most recent call last):
File "./bot.py", line 630, in get_new_vk_messages_v2
ts=data["users"][user]["vk"]["ts"],\
KeyError: 'ts'
mziai commented 4 years ago

14 Столкнулся с этой же проблемой, отписал в баге api.

progserega commented 4 years ago

попробовал поправить в ветке dev, можно на неё переключиться, обновиться и потестить - уйдёт ли баг. У меня работает.

Переключиться на dev:

git pull
git checkout dev
git pull

Вообще убрал ts_polling, заменив на ts - наверное в своё время запутался в этих отпечатках времени :-) https://github.com/progserega/MatrixVkBot/commit/d247537452f28883f0cd3a2e09ca0922c573bae1

--- a/bot.py
+++ b/bot.py
@@ -86,7 +86,6 @@ def process_command(user,room,cmd,formated_message=None,format_type=None,reply_t
       data["users"][user]["vk"]["exit"]=False
       data["users"][user]["vk"]["ts"]=0
       data["users"][user]["vk"]["pts"]=0
-      data["users"][user]["vk"]["ts_polling"]=0
       data["users"][user]["vk"]["ts_check_poll"]=0
     if room not in data["users"][user]["rooms"]:
       data["users"][user]["rooms"][room]={}
@@ -476,8 +475,8 @@ def get_new_vk_messages_v2(user):
       log.debug("success lock() before access global data")
       if "server" in data["users"][user]["vk"]:
         server=data["users"][user]["vk"]["server"]
-      if "ts_polling" in data["users"][user]["vk"]:
-        ts=data["users"][user]["vk"]["ts_polling"]
+      if "ts" in data["users"][user]["vk"]:
+        ts=data["users"][user]["vk"]["ts"]
       if "key" in data["users"][user]["vk"]:
         key=data["users"][user]["vk"]["key"]
     log.debug("release lock() after access global data")
@@ -512,7 +511,7 @@ def get_new_vk_messages_v2(user):
         log.debug("try lock() before access global data()")
         with lock:
           log.debug("success lock() before access global data")
-          data["users"][user]["vk"]["ts_polling"]=ts
+          data["users"][user]["vk"]["ts"]=ts
           data["users"][user]["vk"]["ts_check_poll"]=int(time.time())
         log.debug("release lock() after access global data")
         #log.debug("ret=")
@@ -765,7 +764,7 @@ def get_session(token):
 def update_vk_tses_data(data, user, ts, pts, key, server):
   data["users"][user]["vk"]["server"]=server
   data["users"][user]["vk"]["key"]=key
-  data["users"][user]["vk"]["ts_polling"]=ts
+  data["users"][user]["vk"]["ts"]=ts
   data["users"][user]["vk"]["pts"]=pts
progserega commented 4 years ago

Короче, я не претендую что это фундаментальное решение, но он у меня заработал после того как добавил data["users"][user]["vk"]["exit"] = True в эксепшн под этой функцией, потом вылезла ошибка функции get_new_vk_messages_v2, ее пофиксил поменяв в ts=data["users"][user]["vk"]["ts"] ts на ts_polling

Видать дело было в том, что в функции update_vk_tses_data обновлялся ts_polling, но не обновлялся ts - и в результате, если этого тега не было (а откуда бы он там был) в структуре vk - оно и падало.

mziai commented 4 years ago

Действительно, это решило проблему, по крайней мере для меня. Спасибо за оперативную помощь!

progserega commented 4 years ago

К сожалению, недостаточно оперативно - времени не много получается на этот проект выделять :-)

Тогда я чуток подожду и если сообщений об ошибках не будет - накачу изменения в master. Спасибо за сообщения об ошибках :-)