mirror of
https://github.com/purofle/remake_bot.git
synced 2025-02-06 17:13:29 +08:00
111 lines
3.4 KiB
Go
111 lines
3.4 KiB
Go
package quotely
|
||
|
||
import (
|
||
"fmt"
|
||
tele "gopkg.in/telebot.v3"
|
||
"strings"
|
||
"unicode"
|
||
)
|
||
|
||
func QuoteReply(bot *tele.Bot, message *tele.Message) (replyMsg string) {
|
||
if len(message.Text) < 2 {
|
||
return
|
||
}
|
||
if !strings.HasPrefix(message.Text, "/") || (isASCII(message.Text[:2]) && !strings.HasPrefix(message.Text, "/$")) {
|
||
if !strings.HasPrefix(message.Text, "\\") || (isASCII(message.Text[:2]) && !strings.HasPrefix(message.Text, "\\$")) {
|
||
return
|
||
}
|
||
}
|
||
|
||
keywords := strings.SplitN(EscapeText(strings.Replace(message.Text, "$", "", 1)[1:]), " ", 2)
|
||
if len(keywords) == 0 {
|
||
return
|
||
}
|
||
|
||
senderName := EscapeText(message.Sender.FirstName + " " + message.Sender.LastName)
|
||
senderURI := fmt.Sprintf("tg://user?id=%d", message.Sender.ID)
|
||
replyToName := ""
|
||
replyToURI := ""
|
||
|
||
if message.SenderChat != nil {
|
||
senderName = EscapeText(message.SenderChat.Title)
|
||
senderURI = fmt.Sprintf("https://t.me/%s", message.SenderChat.Username)
|
||
}
|
||
|
||
if message.ReplyTo != nil && message.TopicMessage {
|
||
if message.ReplyTo.ID == message.ThreadID {
|
||
message.ReplyTo = nil
|
||
}
|
||
}
|
||
|
||
if message.ReplyTo != nil {
|
||
replyToName = EscapeText(message.ReplyTo.Sender.FirstName + " " + message.ReplyTo.Sender.LastName)
|
||
replyToURI = fmt.Sprintf("tg://user?id=%d", message.ReplyTo.Sender.ID)
|
||
|
||
if message.ReplyTo.Sender.IsBot && len(message.ReplyTo.Entities) != 0 {
|
||
if message.ReplyTo.Entities[0].Type == "text_mention" {
|
||
replyToName = EscapeText(message.ReplyTo.Entities[0].User.FirstName + " " + message.ReplyTo.Entities[0].User.LastName)
|
||
replyToURI = fmt.Sprintf("tg://user?id=%d", message.ReplyTo.Entities[0].User.ID)
|
||
}
|
||
}
|
||
|
||
if message.ReplyTo.SenderChat != nil {
|
||
replyToName = EscapeText(message.ReplyTo.SenderChat.Title)
|
||
replyToURI = fmt.Sprintf("https://t.me/%s", message.ReplyTo.SenderChat.Username)
|
||
}
|
||
|
||
if strings.HasPrefix(message.Text, "\\") {
|
||
senderName, replyToName = replyToName, senderName
|
||
senderURI, replyToURI = replyToURI, senderURI
|
||
}
|
||
} else {
|
||
textNoCommand := strings.TrimPrefix(strings.TrimPrefix(keywords[0], "/"), "$")
|
||
if text := strings.Split(textNoCommand, "@"); len(text) > 1 {
|
||
name := getUserByUsername(bot, text[1])
|
||
if name != "" {
|
||
keywords[0] = text[0]
|
||
replyToName = EscapeText(name)
|
||
replyToURI = fmt.Sprintf("https://t.me/%s", text[1])
|
||
}
|
||
}
|
||
if replyToName == "" {
|
||
replyToName = "自己"
|
||
replyToURI = senderURI
|
||
}
|
||
}
|
||
if len(keywords) < 2 {
|
||
return fmt.Sprintf("[%s](%s) %s了 [%s](%s)!", senderName, senderURI, keywords[0], replyToName, replyToURI)
|
||
} else {
|
||
return fmt.Sprintf("[%s](%s) %s [%s](%s) %s!", senderName, senderURI, keywords[0], replyToName, replyToURI, keywords[1])
|
||
}
|
||
}
|
||
|
||
func isASCII(s string) bool {
|
||
for _, r := range s {
|
||
if r > unicode.MaxASCII {
|
||
return false
|
||
}
|
||
}
|
||
return true
|
||
}
|
||
|
||
// EscapeText source: https://github.com/go-telegram-bot-api/telegram-bot-api/blob/4126fa611266940425a9dfd37e0c92ba47881718/bot.go#L729
|
||
func EscapeText(text string) string {
|
||
replacer := strings.NewReplacer(
|
||
"_", "\\_", "*", "\\*", "[", "\\[", "]", "\\]", "(",
|
||
"\\(", ")", "\\)", "~", "\\~", "`", "\\`", ">", "\\>",
|
||
"#", "\\#", "+", "\\+", "-", "\\-", "=", "\\=", "|",
|
||
"\\|", "{", "\\{", "}", "\\}", ".", "\\.", "!", "\\!",
|
||
)
|
||
|
||
return replacer.Replace(text)
|
||
}
|
||
|
||
func getUserByUsername(bot *tele.Bot, username string) string {
|
||
user, err := bot.ChatByUsername(username)
|
||
if err != nil {
|
||
return ""
|
||
}
|
||
return user.FirstName + " " + user.LastName
|
||
}
|