forked from carrydela/mygoTgChanBot
增加功能:删除选择;相册转发
This commit is contained in:
@@ -8,6 +8,12 @@ import (
|
||||
tele "gopkg.in/telebot.v3"
|
||||
)
|
||||
|
||||
const (
|
||||
cbPrefixDelEntry = "del:"
|
||||
cbPrefixDelWithMsg = "delwithmsg:"
|
||||
cbPrefixDelOnlyToc = "delonlytoc:"
|
||||
)
|
||||
|
||||
func (b *Bot) handleEntryDel(c tele.Context) error {
|
||||
id := strings.TrimSpace(c.Message().Payload)
|
||||
if id == "" {
|
||||
@@ -19,26 +25,18 @@ func (b *Bot) handleEntryDel(c tele.Context) error {
|
||||
return c.Reply(fmt.Sprintf("❌ %v", err))
|
||||
}
|
||||
|
||||
// 尝试删除频道消息
|
||||
msgDeleted := false
|
||||
if msgID := parseMessageIDFromLink(entry.Link); msgID != 0 {
|
||||
channel := &tele.Chat{ID: b.cfg.Channel.ID}
|
||||
msg := &tele.Message{ID: msgID, Chat: channel}
|
||||
if err := b.bot.Delete(msg); err == nil {
|
||||
msgDeleted = true
|
||||
}
|
||||
}
|
||||
menu := &tele.ReplyMarkup{}
|
||||
delWithMsgBtn := menu.Data("🗑 删除条目+频道消息", cbPrefixDelWithMsg+id)
|
||||
delOnlyTocBtn := menu.Data("📝 仅删除目录条目", cbPrefixDelOnlyToc+id)
|
||||
cancelBtn := menu.Data("❌ 取消", cbCancel)
|
||||
menu.Inline(
|
||||
menu.Row(delWithMsgBtn),
|
||||
menu.Row(delOnlyTocBtn),
|
||||
menu.Row(cancelBtn),
|
||||
)
|
||||
|
||||
if err := b.storage.DeleteEntry(id); err != nil {
|
||||
return c.Reply(fmt.Sprintf("❌ 删除失败: %v", err))
|
||||
}
|
||||
|
||||
b.toc.TriggerUpdate()
|
||||
|
||||
if msgDeleted {
|
||||
return c.Reply(fmt.Sprintf("✅ 已删除: [%s] %s\n📨 频道消息已同步删除", entry.Category, entry.Title))
|
||||
}
|
||||
return c.Reply(fmt.Sprintf("✅ 已删除: [%s] %s", entry.Category, entry.Title))
|
||||
text := fmt.Sprintf("🗑 确认删除?\n\n分类: %s\n标题: %s\n\n请选择删除方式:", entry.Category, entry.Title)
|
||||
return c.Reply(text, menu)
|
||||
}
|
||||
|
||||
func (b *Bot) handleEntryEdit(c tele.Context) error {
|
||||
@@ -118,6 +116,46 @@ func (b *Bot) handleRefresh(c tele.Context) error {
|
||||
return c.Reply("🔄 目录刷新已触发")
|
||||
}
|
||||
|
||||
// handleDeleteEntryCallback 处理删除条目的回调
|
||||
func (b *Bot) handleDeleteEntryCallback(c tele.Context, entryID string, deleteChannelMsg bool) error {
|
||||
entry, err := b.storage.GetEntry(entryID)
|
||||
if err != nil {
|
||||
c.Edit(fmt.Sprintf("❌ %v", err))
|
||||
return c.Respond(&tele.CallbackResponse{Text: "条目不存在"})
|
||||
}
|
||||
|
||||
// 根据用户选择决定是否删除频道消息
|
||||
msgDeleted := false
|
||||
if deleteChannelMsg {
|
||||
if msgID := parseMessageIDFromLink(entry.Link); msgID != 0 {
|
||||
channel := &tele.Chat{ID: b.cfg.Channel.ID}
|
||||
msg := &tele.Message{ID: msgID, Chat: channel}
|
||||
if err := b.bot.Delete(msg); err == nil {
|
||||
msgDeleted = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if err := b.storage.DeleteEntry(entryID); err != nil {
|
||||
c.Edit(fmt.Sprintf("❌ 删除失败: %v", err))
|
||||
return c.Respond(&tele.CallbackResponse{Text: "删除失败"})
|
||||
}
|
||||
|
||||
b.toc.TriggerUpdate()
|
||||
|
||||
var text string
|
||||
if deleteChannelMsg && msgDeleted {
|
||||
text = fmt.Sprintf("✅ 已删除: [%s] %s\n📨 频道消息已同步删除", entry.Category, entry.Title)
|
||||
} else if deleteChannelMsg && !msgDeleted {
|
||||
text = fmt.Sprintf("✅ 已删除: [%s] %s\n⚠️ 频道消息删除失败(可能已被删除)", entry.Category, entry.Title)
|
||||
} else {
|
||||
text = fmt.Sprintf("✅ 已删除: [%s] %s\n📝 频道消息已保留", entry.Category, entry.Title)
|
||||
}
|
||||
|
||||
c.Edit(text)
|
||||
return c.Respond(&tele.CallbackResponse{Text: "删除成功"})
|
||||
}
|
||||
|
||||
// parseMessageIDFromLink 从链接中解析消息ID
|
||||
// 支持格式: https://t.me/c/123456/789 或 https://t.me/username/789
|
||||
func parseMessageIDFromLink(link string) int {
|
||||
|
||||
Reference in New Issue
Block a user