@@ -54,6 +54,9 @@ func WhatsAppEventHandler(evt interface{}) {
5454 case * events.CallOffer :
5555 CallOfferEventHandler (v )
5656
57+ case * events.UndecryptableMessage :
58+ UndecryptableMessageEventHandler (v )
59+
5760 case * events.Message :
5861
5962 isEdited := false
@@ -1271,6 +1274,116 @@ func MessageFromOthersEventHandler(text string, v *events.Message, isEdited bool
12711274 }
12721275}
12731276
1277+ func UndecryptableMessageEventHandler (v * events.UndecryptableMessage ) {
1278+ var (
1279+ cfg = state .State .Config
1280+ logger = state .State .Logger
1281+ tgBot = state .State .TelegramBot
1282+ msgId = v .Info .ID
1283+ )
1284+ defer logger .Sync ()
1285+
1286+ if v .UnavailableType != events .UnavailableTypeViewOnce {
1287+ return
1288+ } else if slices .Contains (cfg .WhatsApp .IgnoreChats , v .Info .Chat .User ) {
1289+ logger .Debug ("returning because message from an ignored chat" ,
1290+ zap .String ("event_id" , v .Info .ID ),
1291+ zap .String ("chat_jid" , v .Info .Chat .String ()),
1292+ )
1293+ return
1294+ }
1295+
1296+ var bridgedText string
1297+ if cfg .WhatsApp .SkipChatDetails {
1298+ logger .Debug ("skipping to add chat details as configured" ,
1299+ zap .String ("event_id" , v .Info .ID ),
1300+ )
1301+ if v .Info .IsIncomingBroadcast () {
1302+ bridgedText += "👥: <b>(Broadcast)</b>\n "
1303+ } else if v .Info .IsFromMe {
1304+ bridgedText += "🧑: <b>You [other device]</b>\n "
1305+ } else if v .Info .IsGroup {
1306+ bridgedText += fmt .Sprintf ("🧑: <b>%s</b>\n " , html .EscapeString (utils .WaGetContactName (v .Info .MessageSource .Sender )))
1307+ }
1308+
1309+ } else {
1310+
1311+ if v .Info .IsFromMe {
1312+ bridgedText += "🧑: <b>You [other device]</b>\n "
1313+ } else {
1314+ bridgedText += fmt .Sprintf ("🧑: <b>%s</b>\n " , html .EscapeString (utils .WaGetContactName (v .Info .MessageSource .Sender )))
1315+ }
1316+ if v .Info .IsIncomingBroadcast () {
1317+ bridgedText += "👥: <b>(Broadcast)</b>\n "
1318+ } else if v .Info .IsGroup {
1319+ bridgedText += fmt .Sprintf ("👥: <b>%s</b>\n " , html .EscapeString (utils .WaGetGroupName (v .Info .Chat )))
1320+ } else {
1321+ bridgedText += "👥: <b>(PVT)</b>\n "
1322+ }
1323+
1324+ }
1325+
1326+ if time .Since (v .Info .Timestamp ).Seconds () > 60 {
1327+ bridgedText += fmt .Sprintf ("🕛: <b>%s</b>\n " ,
1328+ html .EscapeString (v .Info .Timestamp .In (state .State .LocalLocation ).Format (cfg .TimeFormat )))
1329+ }
1330+
1331+ bridgedText += "\n <i>It is a View Once message.\n Please check in your official WhatsApp application</i>"
1332+
1333+ var threadId int64
1334+
1335+ var err error
1336+ if v .Info .Chat .String () == "status@broadcast" {
1337+ threadId , err = utils .TgGetOrMakeThreadFromWa ("status@broadcast" , cfg .Telegram .TargetChatID ,
1338+ "Status" )
1339+ if err != nil {
1340+ utils .TgSendErrorById (tgBot , cfg .Telegram .TargetChatID , 0 , "failed to create/find thread id for 'status@broadcast'" , err )
1341+ return
1342+ }
1343+ } else if v .Info .IsIncomingBroadcast () {
1344+ threadId , err = utils .TgGetOrMakeThreadFromWa (v .Info .MessageSource .Sender .ToNonAD ().String (), cfg .Telegram .TargetChatID ,
1345+ utils .WaGetContactName (v .Info .MessageSource .Sender ))
1346+ if err != nil {
1347+ utils .TgSendErrorById (tgBot , cfg .Telegram .TargetChatID , 0 , fmt .Sprintf ("failed to create/find thread id for '%s'" ,
1348+ v .Info .MessageSource .Sender .ToNonAD ().String ()), err )
1349+ return
1350+ }
1351+ } else if v .Info .IsGroup {
1352+ threadId , err = utils .TgGetOrMakeThreadFromWa (v .Info .Chat .String (), cfg .Telegram .TargetChatID ,
1353+ utils .WaGetGroupName (v .Info .Chat ))
1354+ if err != nil {
1355+ utils .TgSendErrorById (tgBot , cfg .Telegram .TargetChatID , 0 , fmt .Sprintf ("failed to create/find thread id for '%s'" ,
1356+ v .Info .Chat .String ()), err )
1357+ return
1358+ }
1359+ } else {
1360+ var target_chat_jid waTypes.JID
1361+ if v .Info .IsFromMe {
1362+ target_chat_jid = v .Info .Chat
1363+ } else {
1364+ target_chat_jid = v .Info .Chat
1365+ }
1366+
1367+ threadId , err = utils .TgGetOrMakeThreadFromWa (target_chat_jid .ToNonAD ().String (), cfg .Telegram .TargetChatID , utils .WaGetContactName (target_chat_jid ))
1368+ if err != nil {
1369+ utils .TgSendErrorById (tgBot , cfg .Telegram .TargetChatID , 0 , fmt .Sprintf ("failed to create/find thread id for '%s'" ,
1370+ target_chat_jid .ToNonAD ().String ()), err )
1371+ return
1372+ }
1373+ }
1374+
1375+ sentMsg , err := tgBot .SendMessage (cfg .Telegram .TargetChatID , bridgedText , & gotgbot.SendMessageOpts {
1376+ MessageThreadId : threadId ,
1377+ })
1378+ if err != nil {
1379+ panic (fmt .Errorf ("failed to send telegram message: %s" , err ))
1380+ }
1381+ if sentMsg .MessageId != 0 {
1382+ database .MsgIdAddNewPair (msgId , v .Info .MessageSource .Sender .String (), v .Info .Chat .String (),
1383+ cfg .Telegram .TargetChatID , sentMsg .MessageId , sentMsg .MessageThreadId )
1384+ }
1385+ }
1386+
12741387func CallOfferEventHandler (v * events.CallOffer ) {
12751388 var (
12761389 cfg = state .State .Config
0 commit comments