Files
trbot/utils/origin_info/origin_info.go
Hubert Chen ed4268f3de add saved message notice
saved_message:
    add `NoticeChatID` field to receive notice
    default use first admin as notice chat
utils:
    add `MsgLink` and `MsgLinkPrivate` function
origin_info:
    use `tg://user?id=<userID>` to link to a user
2025-08-18 03:09:55 +08:00

107 lines
3.1 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package origin_info
import (
"fmt"
"trbot/utils"
"trbot/utils/type/message_utils"
"github.com/go-telegram/bot/models"
)
type OriginInfo struct {
FromName string `yaml:"FromName,omitempty" json:"from_name,omitempty"`
FromID int64 `yaml:"FromID,omitempty" json:"from_id,omitempty"`
// 用于查看消息来源
ChatID int64 `yaml:"ChatID,omitempty" json:"chat_id,omitempty"`
MessageID int `yaml:"MessageID,omitempty" json:"message_id,omitempty"`
}
func GetOriginInfo(msg *models.Message) *OriginInfo {
if msg == nil { return nil }
if msg.ForwardOrigin != nil && msg.ForwardOrigin.MessageOriginHiddenUser == nil {
switch msg.ForwardOrigin.Type {
case models.MessageOriginTypeUser:
return &OriginInfo{
FromName: utils.ShowUserName(&msg.ForwardOrigin.MessageOriginUser.SenderUser),
FromID: msg.ForwardOrigin.MessageOriginUser.SenderUser.ID,
}
// case models.MessageOriginTypeHiddenUser:
// return &OriginInfo{
// FromName: msg.ForwardOrigin.MessageOriginHiddenUser.SenderUserName,
// }
case models.MessageOriginTypeChat:
return &OriginInfo{
FromName: utils.ShowChatName(&msg.ForwardOrigin.MessageOriginChat.SenderChat),
FromID: msg.ForwardOrigin.MessageOriginChat.SenderChat.ID,
}
case models.MessageOriginTypeChannel:
return &OriginInfo{
FromName: utils.ShowChatName(&msg.ForwardOrigin.MessageOriginChannel.Chat),
FromID: msg.ForwardOrigin.MessageOriginChannel.Chat.ID,
MessageID: msg.ForwardOrigin.MessageOriginChannel.MessageID,
}
}
} else if msg.Chat.Type != models.ChatTypePrivate {
attr := message_utils.GetMessageAttribute(msg)
if attr.IsFromLinkedChannel || attr.IsFromAnonymous || attr.IsUserAsChannel {
return &OriginInfo{
FromName: utils.ShowChatName(msg.SenderChat),
FromID: msg.SenderChat.ID,
ChatID: msg.Chat.ID,
MessageID: msg.ID,
}
} else if msg.From != nil {
return &OriginInfo{
FromName: utils.ShowUserName(msg.From),
FromID: msg.From.ID,
ChatID: msg.Chat.ID,
MessageID: msg.ID,
}
}
}
return nil
}
// build a InlineKeyboardButton for origin info
func (o *OriginInfo) BuildButton() models.ReplyMarkup {
if o == nil {
return nil
}
var buttons []models.InlineKeyboardButton
if o.FromID != 0 {
if o.FromID < 0 {
// -100 开头的 ID为群组或频道
buttons = append(buttons, models.InlineKeyboardButton{
Text: "来自 " + o.FromName,
URL: fmt.Sprintf("https://t.me/c/%s/0", utils.RemoveIDPrefix(o.FromID)),
})
} else {
buttons = append(buttons, models.InlineKeyboardButton{
Text: "来自用户 " + o.FromName,
URL: fmt.Sprintf("tg://user?id=%d", o.FromID),
})
}
}
if o.MessageID != 0 {
if o.ChatID == 0 {
// 保存来源是频道
buttons = append(buttons, models.InlineKeyboardButton{
Text: "查看消息",
URL: utils.MsgLinkPrivate(o.FromID, o.MessageID),
})
} else {
// 从群组中保存的消息
buttons = append(buttons, models.InlineKeyboardButton{
Text: "查看消息",
URL: utils.MsgLinkPrivate(o.ChatID, o.MessageID),
})
}
}
return &models.InlineKeyboardMarkup{InlineKeyboard: [][]models.InlineKeyboardButton{buttons}}
}