Smail/plugins/pmail_telegram_push/hook/setting.go

115 lines
3.3 KiB
Go

package hook
import (
"context"
"embed"
"encoding/json"
"fmt"
"strings"
"github.com/go-telegram/bot/models"
"github.com/ydzydzydz/pmail_telegram_push/logger"
telegrammodel "github.com/ydzydzydz/pmail_telegram_push/model"
)
var (
//go:embed dist/index.html
settingHTML embed.FS
)
func settingPage() string {
content, err := settingHTML.ReadFile("dist/index.html")
if err != nil {
return "<div>Telegram 插件页面暂不可用</div>"
}
return string(content)
}
type Response struct {
Code int `json:"code"`
Message string `json:"message"`
Data any `json:"data,omitempty"`
}
func SuccessResponse(message string, data any) *Response {
return &Response{Code: 0, Message: message, Data: data}
}
func ErrorResponse(message string) *Response {
return &Response{Code: -1, Message: message}
}
func (r *Response) Json() string {
data, err := json.Marshal(r)
if err != nil {
logger.PluginLogger.Error().Err(err).Msg("序列化响应失败")
return ""
}
return string(data)
}
func (h *PmailTelegramPushHook) getSetting(userID int) string {
setting := h.settings.get(userID)
return SuccessResponse("获取 Telegram 推送设置成功", setting).Json()
}
func (h *PmailTelegramPushHook) testMessage(userID int, requestData string) string {
var setting telegrammodel.TelegramPushSetting
if err := json.Unmarshal([]byte(requestData), &setting); err != nil {
return ErrorResponse("测试消息请求格式不正确").Json()
}
setting.ChatID = strings.TrimSpace(setting.ChatID)
if !validChatID(setting.ChatID) || setting.ChatID == "" {
return ErrorResponse("测试消息 Chat ID 格式不正确").Json()
}
if h.bot == nil {
return ErrorResponse("Telegram Bot 尚未配置").Json()
}
if _, err := h.sendTestMessage(&setting); err != nil {
logger.PluginLogger.Error().Err(err).Msg("发送测试消息失败")
return ErrorResponse("发送测试消息失败").Json()
}
return SuccessResponse("测试 Telegram 推送消息成功", nil).Json()
}
func (h *PmailTelegramPushHook) updateSetting(userID int, requestData string) string {
var setting telegrammodel.TelegramPushSetting
decoder := json.NewDecoder(strings.NewReader(requestData))
decoder.DisallowUnknownFields()
if err := decoder.Decode(&setting); err != nil {
return ErrorResponse("设置请求格式不正确").Json()
}
if err := h.settings.update(userID, telegramSetting{
ChatID: setting.ChatID,
ShowContent: setting.ShowContent,
SpoilerContent: setting.SpoilerContent,
SendAttachments: setting.SendAttachments,
DisableLinkPreview: setting.DisableLinkPreview,
}); err != nil {
return ErrorResponse(err.Error()).Json()
}
return SuccessResponse("更新 Telegram 推送设置成功", nil).Json()
}
type BotInfo struct {
Username string `json:"username"`
BotLink string `json:"bot_link"`
}
func NewBotInfo(username string) BotInfo {
return BotInfo{Username: username, BotLink: fmt.Sprintf("https://t.me/%s", username)}
}
func (h *PmailTelegramPushHook) getBotInfo() string {
if h.bot == nil {
return ErrorResponse("Telegram Bot 尚未配置").Json()
}
me, err := h.bot.GetMe(context.Background())
if err != nil {
return ErrorResponse("获取 Telegram Bot 信息失败").Json()
}
return SuccessResponse("获取 Telegram Bot 信息成功", NewBotInfo(me.Username)).Json()
}
var _ = models.Message{}