progserega / MatrixVkBot

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

Редактирование сообщения на стороне ВК приводит к дублированию сообщения в Матрикс #12

Open MurzNN opened 5 years ago

MurzNN commented 5 years ago

Если отредактировать в ВК отправленное сообщение, то бот его присылает как новое сообщение "Ваша реплика". Было бы здорово, если б он научился делать Edit соответствующего старого сообщения.

progserega commented 4 years ago

Хм. Есть некоторый нюанс:

  1. Есть идентификаторы сообщений в matrix
  2. Есть идентификаторы сообщений в vk

Соответственно, допустим, из VK приходит сообщение с id=2. Оно отправляется в матрицу , допустим как event_id=333. Чуть позже из ВК приходит опять сообщение, в котором id=2, но текст уже иной. Ну и флажок там тоже есть, что это обновление...

И вот, получается, что боту нужно понять, какое event_id в matrix обновлять... Бот, получается, должен хранить все соответствия vk_message_id=matrix_event_id. O_o Но это как-то накладно... Можно, конечно попытаться хранить "последние 20 сообщений для каждой комнаты, но это похоже на какой-то грязный хак, который правда будет покрывать 99% всех случаев редактирования сообщений :-/

MurzNN commented 4 years ago

Судя по остальным мостам в Матриксе - они все ведут свою базу данных с переправленными сообщениями, где хранится id внешнего сообщения и матриксового, так что видимо без аналогичного способа никак не решить проблему ;(

MurzNN commented 4 years ago

Ещё, как вариант, можно хранить id вк-шных сообщений как отдельное поле в json у m.message - я уточнил в комнате https://matrix.to/#/!jxlRxnrZCsjpjDubDX:matrix.org/$JORIf-2lCprGR5_099_Vld5XuSv8SVvrpKBiA0layrk?via=matrix.org&via=mozilla.org&via=privacytools.io - сказали что это норм вариант. Непонятно только как потом выискивать сообщения по этим кастомным полям среди всех.

progserega commented 4 years ago

Ещё, как вариант, можно хранить id вк-шных сообщений как отдельное поле в json у m.message - я уточнил в комнате https://matrix.to/#/!jxlRxnrZCsjpjDubDX:matrix.org/$JORIf-2lCprGR5_099_Vld5XuSv8SVvrpKBiA0layrk?via=matrix.org&via=mozilla.org&via=privacytools.io - сказали что это норм вариант. Непонятно только как потом выискивать сообщения по этим кастомным полям среди всех.

а я и не знал и добавлял id=XXX в тело сообщения, когда нужно было связывать сообщение со сторонней системой... Это сработает, когда нужно будет редактирование сообщения ИЗ матрицы отправлять в VK. :-) Иначе matrix_message_id пришлось бы хранить в ВК-шном сообщении :-)

Получается остаётся по факту (чтобы покрыть оба варианта) - только переезжать с bot_state.json на полноценное хранение в базе данных.