Skip to content

Commit f9810c4

Browse files
authored
feat: provide retry button when smr failed on telegram (#202)
* feat: provide retry button when smr failed to read * should not provide retry button when content is not supported * fix ent generation check * fix lint issues * fix: failed to remove retry button
1 parent 733684e commit f9810c4

File tree

6 files changed

+96
-7
lines changed

6 files changed

+96
-7
lines changed

go.sum

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,8 @@ github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
130130
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
131131
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
132132
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
133+
github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
134+
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
133135
github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y=
134136
github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
135137
github.com/maxbrunsfeld/counterfeiter/v6 v6.6.1 h1:9XE5ykDiC8eNSqIPkxx0EsV3kMX1oe4kQWRZjIgytUA=
@@ -151,6 +153,8 @@ github.com/nekomeowww/xo v1.4.0 h1:aueb6SZPV5yF8Eauir8WF7iCBCa0Wjkrw6148y8iCsA=
151153
github.com/nekomeowww/xo v1.4.0/go.mod h1:2puSnnYUtvKHV3krZfCRolEqTv9nuU+I59GhxADADFY=
152154
github.com/nicksnyder/go-i18n/v2 v2.4.0 h1:3IcvPOAvnCKwNm0TB0dLDTuawWEj+ax/RERNC+diLMM=
153155
github.com/nicksnyder/go-i18n/v2 v2.4.0/go.mod h1:nxYSZE9M0bf3Y70gPQjN9ha7XNHX7gMc814+6wVyEI4=
156+
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
157+
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
154158
github.com/onsi/ginkgo/v2 v2.16.0 h1:7q1w9frJDzninhXxjZd+Y/x54XNjG/UlRLIYPZafsPM=
155159
github.com/onsi/ginkgo/v2 v2.16.0/go.mod h1:llBI3WDLL9Z6taip6f33H76YcWtJv+7R3HigUjbIBOs=
156160
github.com/onsi/gomega v1.31.1 h1:KYppCUK+bUgAZwHOu7EXVBKyQA6ILvOESHkn/tgoqvo=
@@ -193,6 +197,10 @@ github.com/slack-go/slack v0.12.5 h1:ddZ6uz6XVaB+3MTDhoW04gG+Vc/M/X1ctC+wssy2cqs
193197
github.com/slack-go/slack v0.12.5/go.mod h1:hlGi5oXA+Gt+yWTPP0plCdRKmjsDxecdHxYQdlMQKOw=
194198
github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
195199
github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
200+
github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I=
201+
github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0=
202+
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
203+
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
196204
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
197205
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
198206
github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package summarize
2+
3+
import (
4+
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
5+
"github.com/nekomeowww/insights-bot/pkg/bots/tgbot"
6+
"github.com/nekomeowww/insights-bot/pkg/types/smr"
7+
"go.uber.org/zap"
8+
)
9+
10+
func (h *Handlers) handleCallbackQueryRetry(c *tgbot.Context) (tgbot.Response, error) {
11+
messageID := c.Update.CallbackQuery.Message.MessageID
12+
var data smr.TaskInfo
13+
14+
err := c.BindFromCallbackQueryData(&data)
15+
if err != nil {
16+
h.logger.Error("failed to bind callback query data when retry smr",
17+
zap.Error(err),
18+
zap.Int("message_id", messageID),
19+
zap.Int64("chat_id", c.Update.CallbackQuery.Message.Chat.ID),
20+
zap.Int64("from_id", c.Update.CallbackQuery.From.ID),
21+
zap.String("data", c.Update.CallbackQuery.Data),
22+
)
23+
24+
return nil, nil
25+
}
26+
27+
err = h.smrQueue.AddTask(data)
28+
29+
if err != nil {
30+
h.logger.Error("failed to move task back to queue", zap.Error(err))
31+
return nil, nil
32+
}
33+
34+
// remove the retry button
35+
c.Bot.MayRequest(tgbotapi.NewEditMessageTextAndMarkup(
36+
data.ChatID,
37+
messageID,
38+
h.i18n.TWithLanguage(data.Language, "commands.groups.summarization.commands.smr.reading"),
39+
tgbotapi.InlineKeyboardMarkup{
40+
InlineKeyboard: [][]tgbotapi.InlineKeyboardButton{},
41+
}))
42+
43+
return nil, nil
44+
}

internal/bots/telegram/handlers/summarize/summarize.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,4 +61,5 @@ func (h *Handlers) Install(dispatcher *tgbot.Dispatcher) {
6161

6262
dispatcher.OnChannelPost(tgbot.NewHandler(h.HandleChannelPost))
6363
dispatcher.OnCallbackQuery("smr/summarization/feedback/react", tgbot.NewHandler(h.handleCallbackQueryReact))
64+
dispatcher.OnCallbackQuery("smr/summarization/retry", tgbot.NewHandler(h.handleCallbackQueryRetry))
6465
}

internal/services/smr/processor.go

Lines changed: 41 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import (
1818
"go.uber.org/zap"
1919
)
2020

21-
func (s *Service) processOutput(info types.TaskInfo, result *smr.URLSummarizationOutput) string {
21+
func (s *Service) formatOutput(info types.TaskInfo, result *smr.URLSummarizationOutput) string {
2222
switch info.Platform {
2323
case bot.FromPlatformTelegram:
2424
return result.FormatSummarizationAsHTML()
@@ -31,7 +31,7 @@ func (s *Service) processOutput(info types.TaskInfo, result *smr.URLSummarizatio
3131
}
3232
}
3333

34-
func (s *Service) processError(err error, language string) string {
34+
func (s *Service) formatError(err error, language string) string {
3535
if errors.Is(err, smr.ErrContentNotSupported) {
3636
return s.i18n.TWithLanguage(language, "commands.groups.summarization.commands.smr.contentNotSupported")
3737
} else if errors.Is(err, smr.ErrNetworkError) || errors.Is(err, smr.ErrRequestFailed) {
@@ -41,7 +41,22 @@ func (s *Service) processError(err error, language string) string {
4141
return s.i18n.TWithLanguage(language, "commands.groups.summarization.commands.smr.failedToRead")
4242
}
4343

44-
func (s *Service) sendResult(output *smr.URLSummarizationOutput, info types.TaskInfo, result string) {
44+
func (s *Service) newRetryButtonMarkup(info types.TaskInfo) (tgbotapi.InlineKeyboardMarkup, error) {
45+
data, err := s.tgBot.Bot().AssignOneCallbackQueryData("smr/summarization/retry", &info)
46+
47+
if err != nil {
48+
return tgbotapi.InlineKeyboardMarkup{}, err
49+
}
50+
51+
return tgbotapi.NewInlineKeyboardMarkup([]tgbotapi.InlineKeyboardButton{
52+
{
53+
Text: s.i18n.TWithLanguage(info.Language, "commands.groups.summarization.commands.smr.retry"),
54+
CallbackData: &data,
55+
},
56+
}), nil
57+
}
58+
59+
func (s *Service) sendResult(output *smr.URLSummarizationOutput, info types.TaskInfo, result string, provideRetryButton bool) {
4560
switch info.Platform {
4661
case bot.FromPlatformTelegram:
4762
msgEdit := tgbotapi.EditMessageTextConfig{
@@ -53,6 +68,23 @@ func (s *Service) sendResult(output *smr.URLSummarizationOutput, info types.Task
5368
ParseMode: tgbotapi.ModeHTML,
5469
}
5570

71+
if provideRetryButton {
72+
var err error
73+
retryButtonMarkup, err := s.newRetryButtonMarkup(info)
74+
75+
if err != nil {
76+
s.logger.Error("smr service: failed to create retry button markup",
77+
zap.Error(err),
78+
zap.Int64("chat_id", info.ChatID),
79+
zap.String("platform", info.Platform.String()),
80+
)
81+
82+
return
83+
}
84+
85+
msgEdit.ReplyMarkup = &retryButtonMarkup
86+
}
87+
5688
if output == nil {
5789
_, err := s.tgBot.Send(msgEdit)
5890
if err != nil {
@@ -99,6 +131,7 @@ func (s *Service) sendResult(output *smr.URLSummarizationOutput, info types.Task
99131
)
100132
}
101133
case bot.FromPlatformSlack:
134+
// TODO: provide retry button
102135
token, err := s.ent.SlackOAuthCredentials.Query().
103136
Where(slackoauthcredentials.TeamID(info.TeamID)).
104137
First(context.Background())
@@ -127,6 +160,7 @@ func (s *Service) sendResult(output *smr.URLSummarizationOutput, info types.Task
127160
)
128161
}
129162
case bot.FromPlatformDiscord:
163+
// TODO: provide retry button
130164
channelID, _ := snowflake.Parse(info.ChannelID)
131165
_, err := s.discordBot.Rest().
132166
CreateMessage(channelID, discord.NewMessageCreateBuilder().
@@ -174,12 +208,12 @@ func (s *Service) processor(info types.TaskInfo) {
174208
smrResult, err := s.model.SummarizeInputURL(ctx, info.URL, info.Platform)
175209
if err != nil {
176210
s.logger.Warn("smr service: summarization failed", zap.Error(err))
177-
errStr := s.processError(err, lo.Ternary(info.Language == "", "en", info.Language))
178-
s.sendResult(nil, info, errStr)
211+
errStr := s.formatError(err, lo.Ternary(info.Language == "", "en", info.Language))
212+
s.sendResult(nil, info, errStr, !errors.Is(err, smr.ErrContentNotSupported))
179213

180214
return
181215
}
182216

183-
finalResult := s.processOutput(info, smrResult)
184-
s.sendResult(smrResult, info, finalResult)
217+
finalResult := s.formatOutput(info, smrResult)
218+
s.sendResult(smrResult, info, finalResult, false)
185219
}

locales/en.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ commands:
8080
failedToRead: Quantum Speed-Reading was unsuccessful. Would you like to retry?
8181
failedToReadDueToFailedToFetch: Encountered an issue retrieving the content for Quantum Speed-Reading. Perhaps another attempt might succeed?
8282
contentNotSupported: This content is not supported by Quantum Speed-Reading. Considering another link might be beneficial.
83+
retry: Retry
8384

8485
prompts:
8586
smr:

locales/zh-CN.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ commands:
3737
failedToReadDueToFailedToFetch: 量子速读的链接读取失败了哦。可以再试试?
3838
contentNotSupported: 暂时不支持量子速读这样的内容呢,可以换个别的链接试试。
3939
permissionDenied: 本应用没有权限向这个频道发送消息,尝试重新安装一下?
40+
retry: 重试
4041

4142
modules:
4243
telegram:

0 commit comments

Comments
 (0)