@@ -4,13 +4,14 @@ import (
44 "MirrorBotGo/utils"
55 "errors"
66 "fmt"
7- "go.uber.org/ratelimit"
87 "runtime"
98 "runtime/pprof"
109 "strings"
1110 "sync"
1211 "time"
1312
13+ "go.uber.org/ratelimit"
14+
1415 "github.com/PaulSonOfLars/gotgbot/v2"
1516 "github.com/shirou/gopsutil/v3/cpu"
1617)
@@ -88,10 +89,26 @@ func SendMessageImpl(b *gotgbot.Bot, messageText string, message *gotgbot.Messag
8889 if isMessageNotFoundError (err ) {
8990 break
9091 }
92+ var sleepTime time.Duration
9193 retries += 1
92- sleepTime := time .Duration (SleepMultiplier * float32 (retries )) * time .Second
93- L ().Errorf ("SendMessage: %v, sleeping for %s, retry: %d" , err , sleepTime , retries )
94- time .Sleep (sleepTime )
94+ if isMessageFloodWaitError (err ) {
95+ L ().Infof ("flood wait error detected: %v" , err )
96+ parsedDuration , err := utils .ParseMessageFloodWaitDuration (err )
97+ if err != nil {
98+ L ().Errorf ("error while parsing flood wait sleep duration: %v" , err )
99+ } else {
100+ sleepTime = time .Duration (parsedDuration ) * time .Second
101+ }
102+ } else {
103+ sleepTime = time .Duration (SleepMultiplier * float32 (retries )) * time .Second
104+ }
105+ if sleepTime < time .Duration (120 )* time .Second {
106+ time .Sleep (sleepTime )
107+ L ().Errorf ("sendMessage: %v, sleeping for %s, retry: %d" , err , sleepTime , retries )
108+ } else {
109+ L ().Errorf ("sendMessage: %v, sleep duration is more than 120 seconds, giving up!!!" , err )
110+ break
111+ }
95112 }
96113 }
97114 return msg
@@ -112,6 +129,13 @@ func isEditMessageContentSameError(err error) bool {
112129 return strings .Contains (err .Error (), "specified new message content and reply markup are exactly the same as a current content and reply markup of the message" )
113130}
114131
132+ func isMessageFloodWaitError (err error ) bool {
133+ if err == nil {
134+ return false
135+ }
136+ return strings .Contains (err .Error (), "retry after " )
137+ }
138+
115139func isMessageNotFoundError (err error ) bool {
116140 if err == nil {
117141 return false
@@ -142,13 +166,34 @@ func EditMessageImpl(b *gotgbot.Bot, messageText string, message *gotgbot.Messag
142166 if err == nil {
143167 break
144168 } else {
145- if isEditMessageContentSameError (err ) || isMessageNotFoundError (err ) { //ignore this error
169+ if isEditMessageContentSameError (err ) { //ignore this error
170+ break
171+ }
172+ if isMessageNotFoundError (err ) {
173+ L ().Infof ("message to edit not found: %v, dropping from StatusManager." , message .MessageId )
174+ DeleteStatusMessage (b , message )
146175 break
147176 }
177+ var sleepTime time.Duration
148178 retries += 1
149- sleepTime := time .Duration (SleepMultiplier * float32 (retries )) * time .Second
150- L ().Errorf ("editMessage: %v, sleeping for %s, retry: %d" , err , sleepTime , retries )
151- time .Sleep (sleepTime )
179+ if isMessageFloodWaitError (err ) {
180+ L ().Infof ("flood wait error detected: %v" , err )
181+ parsedDuration , err := utils .ParseMessageFloodWaitDuration (err )
182+ if err != nil {
183+ L ().Errorf ("error while parsing flood wait sleep duration: %v" , err )
184+ } else {
185+ sleepTime = time .Duration (parsedDuration ) * time .Second
186+ }
187+ } else {
188+ sleepTime = time .Duration (SleepMultiplier * float32 (retries )) * time .Second
189+ }
190+ if sleepTime < time .Duration (120 )* time .Second {
191+ time .Sleep (sleepTime )
192+ L ().Errorf ("editMessage: %v, sleeping for %s, retry: %d" , err , sleepTime , retries )
193+ } else {
194+ L ().Errorf ("editMessage: %v, sleep duration is more than 120 seconds, giving up!!!" , err )
195+ break
196+ }
152197 }
153198 }
154199 return msg
@@ -177,6 +222,11 @@ func DeleteAllMessages(b *gotgbot.Bot) {
177222 }
178223}
179224
225+ func DeleteStatusMessage (b * gotgbot.Bot , message * gotgbot.Message ) {
226+ DeleteMessage (b , message )
227+ DeleteMessageByChatId (message .Chat .Id )
228+ }
229+
180230func GetCpuUsage () string {
181231 out := ""
182232 data , err := cpu .Percent (10 * time .Millisecond , false )
@@ -317,6 +367,10 @@ func SendStatusMessage(b *gotgbot.Bot, message *gotgbot.Message, deleteCommandMe
317367 }
318368 newMsg .Date = 0
319369 AddStatusMessage (newMsg )
370+ duration := utils .GetStatusMessageAutoDeleteTime ()
371+ if duration > 0 {
372+ AutoDeleteMessages (b , time .Duration (duration )* time .Second , newMsg )
373+ }
320374 return nil
321375 }
322376 SenderQueue .QueueMessage (message .Chat .Id , MessageSendItem {
0 commit comments