MatrixVkBot icon indicating copy to clipboard operation
MatrixVkBot copied to clipboard

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

Open MurzNN opened this issue 6 years ago • 4 comments

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

MurzNN avatar Sep 05 '19 10:09 MurzNN

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

  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% всех случаев редактирования сообщений :-/

progserega avatar Jun 14 '20 13:06 progserega

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

MurzNN avatar Jun 15 '20 07:06 MurzNN

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

MurzNN avatar Jun 15 '20 07:06 MurzNN

Ещё, как вариант, можно хранить 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 на полноценное хранение в базе данных.

progserega avatar Jul 01 '20 01:07 progserega