diff --git a/pkg/connector/msgconv/tomatrix.go b/pkg/connector/msgconv/tomatrix.go index c8a9c378..45dea2c0 100644 --- a/pkg/connector/msgconv/tomatrix.go +++ b/pkg/connector/msgconv/tomatrix.go @@ -92,8 +92,8 @@ func (mc *MessageConverter) ToMatrix(ctx context.Context, portal *bridgev2.Porta cm.Parts = append(cm.Parts, location) case tg.MessageMediaPollTypeID: cm.Parts = append(cm.Parts, mc.convertPoll(media)) - // case tg.MessageMediaDiceTypeID: - // cm.Parts = append(cm.Parts, mc.convertDice(media)) + case tg.MessageMediaDiceTypeID: + cm.Parts = append(cm.Parts, mc.convertDice(media)) // case tg.MessageMediaGameTypeID: // cm.Parts = append(cm.Parts, mc.convertGame(media)) // case tg.MessageMediaStoryTypeID: @@ -407,3 +407,74 @@ func (mc *MessageConverter) convertPoll(media tg.MessageMediaClass) *bridgev2.Co }, } } + +func (mc *MessageConverter) convertDice(media tg.MessageMediaClass) *bridgev2.ConvertedMessagePart { + roll := media.(*tg.MessageMediaDice) + + var result string + var text strings.Builder + text.WriteString(roll.Emoticon) + + switch roll.Emoticon { + case "🎯": + text.WriteString(" Dart throw") + case "🎲": + text.WriteString(" Dice roll") + case "🏀": + text.WriteString(" Basketball throw") + case "🎰": + text.WriteString(" Slot machine") + emojis := map[int]string{ + 0: "🍫", + 1: "🍒", + 2: "🍋", + 3: "7️⃣", + } + res := roll.Value - 1 + result = fmt.Sprintf("%s %s %s", emojis[res%4], emojis[res/4%4], emojis[res/16]) + case "🎳": + text.WriteString(" Bowling") + result = map[int]string{ + 1: "miss", + 2: "1 pin down", + 3: "3 pins down, split", + 4: "4 pins down, split", + 5: "5 pins down", + 6: "strike 🎉", + }[roll.Value] + case "⚽": + text.WriteString(" Football kick") + result = map[int]string{ + 1: "miss", + 2: "hit the woodwork", + 3: "goal", // seems to go in through the center + 4: "goal", + 5: "goal 🎉", // seems to go in through the top right corner, includes confetti + }[roll.Value] + } + + text.WriteString(" result: ") + if len(result) > 0 { + text.WriteString(result) + text.WriteString(fmt.Sprintf(" (%d)", roll.Value)) + } else { + text.WriteString(fmt.Sprintf("%d", roll.Value)) + } + + return &bridgev2.ConvertedMessagePart{ + ID: networkid.PartID("dice"), + Type: event.EventMessage, + Content: &event.MessageEventContent{ + MsgType: event.MsgText, + Body: text.String(), + Format: event.FormatHTML, + FormattedBody: fmt.Sprintf("

%s

", text.String()), + }, + Extra: map[string]any{ + "fi.mau.telegram.dice": map[string]any{ + "emoticon": roll.Emoticon, + "value": roll.Value, + }, + }, + } +}