@@ -179,16 +179,11 @@ func mainMenuHandler(b *gotgbot.Bot, ctx *ext.Context) error {
179179func showPriceagentDetail (b * gotgbot.Bot , ctx * ext.Context ) error {
180180 cb := ctx .Update .CallbackQuery
181181
182- menu , parseErr := models . NewMenu ( cb . Data )
182+ menu , priceagent , parseErr := parseMenuPriceagent ( ctx )
183183 if parseErr != nil {
184184 return fmt .Errorf ("showPriceagentDetail: failed to parse callback data: %w" , parseErr )
185185 }
186186
187- priceagent , dbErr := database .GetPriceagentForUserByID (ctx .EffectiveUser .Id , menu .PriceAgent )
188- if dbErr != nil {
189- return fmt .Errorf ("showPriceagentDetail: failed to get priceagent from database: %w" , dbErr )
190- }
191-
192187 var backCallbackData string
193188 switch {
194189 case priceagent .Entity .Type == geizhals .Wishlist :
@@ -205,8 +200,9 @@ func showPriceagentDetail(b *gotgbot.Bot, ctx *ext.Context) error {
205200
206201 notificationButtonText := fmt .Sprintf ("⏰ %s" , priceagent .NotificationSettings .String ())
207202
208- linkName := createLink (priceagent .Entity .URL , priceagent .Entity .Name )
209- editedText := fmt .Sprintf ("%s kostet aktuell %s" , linkName , bold (createPrice (priceagent .Entity .Price )))
203+ linkName := createLink (priceagent .EntityURL (), priceagent .Entity .Name )
204+ price := priceagent .CurrentEntityPrice ()
205+ editedText := fmt .Sprintf ("%s kostet aktuell %s" , linkName , bold (price .String ()))
210206 markup := gotgbot.InlineKeyboardMarkup {
211207 InlineKeyboard : [][]gotgbot.InlineKeyboardButton {
212208 {
@@ -224,19 +220,19 @@ func showPriceagentDetail(b *gotgbot.Bot, ctx *ext.Context) error {
224220 case "00" :
225221 _ , err := cb .Message .EditText (b , editedText , & gotgbot.EditMessageTextOpts {ReplyMarkup : markup , ParseMode : "HTML" })
226222 if err != nil {
227- return fmt .Errorf ("showPriceagent : failed to edit message text: %w" , err )
223+ return fmt .Errorf ("showPriceagentDetail : failed to edit message text: %w" , err )
228224 }
229225 case "01" :
230226 bot .DeleteMessage (ctx .EffectiveChat .Id , cb .Message .MessageId )
231227
232228 _ , err := b .SendMessage (ctx .EffectiveChat .Id , editedText , & gotgbot.SendMessageOpts {ReplyMarkup : markup , ParseMode : "HTML" })
233229 if err != nil {
234- return fmt .Errorf ("showPriceagent : failed to send new message: %w" , err )
230+ return fmt .Errorf ("showPriceagentDetail : failed to send new message: %w" , err )
235231 }
236232 case "02" :
237233 _ , err := b .SendMessage (ctx .EffectiveChat .Id , editedText , & gotgbot.SendMessageOpts {ReplyMarkup : markup , ParseMode : "HTML" })
238234 if err != nil {
239- return fmt .Errorf ("showPriceagent : failed to send new message: %w" , err )
235+ return fmt .Errorf ("showPriceagentDetail : failed to send new message: %w" , err )
240236 }
241237 }
242238 return nil
@@ -247,22 +243,18 @@ func showPriceagentDetail(b *gotgbot.Bot, ctx *ext.Context) error {
247243func changePriceagentSettingsHandler (b * gotgbot.Bot , ctx * ext.Context ) error {
248244 cb := ctx .Update .CallbackQuery
249245
250- priceagentID , parseErr := parseIDFromCallbackData ( cb . Data , "m04_00_" )
246+ _ , priceagent , parseErr := parseMenuPriceagent ( ctx )
251247 if parseErr != nil {
252- return fmt .Errorf ("changePriceagentSettingsHandler: failed to parse priceagentID from callback data: %w" , parseErr )
253- }
254-
255- priceagent , dbErr := database .GetPriceagentForUserByID (ctx .EffectiveUser .Id , priceagentID )
256- if dbErr != nil {
257- return fmt .Errorf ("setNotifPriceagentHandler: failed to get priceagent from database: %w" , dbErr )
248+ return fmt .Errorf ("changePriceagentSettingsHandler: failed to parse callback data: %w" , parseErr )
258249 }
259250
260251 if _ , err := cb .Answer (b , & gotgbot.AnswerCallbackQueryOpts {}); err != nil {
261252 return fmt .Errorf ("changePriceagentSettingsHandler: failed to answer callback query: %w" , err )
262253 }
263254
264- linkName := createLink (priceagent .Entity .URL , priceagent .Entity .Name )
265- editedText := fmt .Sprintf ("%s\n \n Wann möchtest du für %s alarmiert werden?\n \n Aktuelle Einstellung: %s\n Aktueller Preis: %s" , bold ("Benachrichtigungseinstellungen" ), linkName , bold (priceagent .NotificationSettings .String ()), bold (createPrice (priceagent .Entity .Price )))
255+ linkName := createLink (priceagent .EntityURL (), priceagent .Entity .Name )
256+ price := priceagent .CurrentEntityPrice ()
257+ editedText := fmt .Sprintf ("%s\n \n Wann möchtest du für %s alarmiert werden?\n \n Aktuelle Einstellung: %s\n Aktueller Preis: %s" , bold ("Benachrichtigungseinstellungen" ), linkName , bold (priceagent .NotificationSettings .String ()), bold (price .String ()))
266258 markup := gotgbot.InlineKeyboardMarkup {
267259 InlineKeyboard : [][]gotgbot.InlineKeyboardButton {
268260 {
@@ -284,21 +276,16 @@ func changePriceagentSettingsHandler(b *gotgbot.Bot, ctx *ext.Context) error {
284276func deletePriceagentConfirmationHandler (b * gotgbot.Bot , ctx * ext.Context ) error {
285277 cb := ctx .Update .CallbackQuery
286278
287- priceagentID , parseErr := parseIDFromCallbackData ( cb . Data , "m04_98_" )
279+ _ , priceagent , parseErr := parseMenuPriceagent ( ctx )
288280 if parseErr != nil {
289- return fmt .Errorf ("deletePriceagentConfirmationHandler: failed to parse priceagentID from callback data: %w" , parseErr )
290- }
291-
292- priceagent , dbErr := database .GetPriceagentForUserByID (ctx .EffectiveUser .Id , priceagentID )
293- if dbErr != nil {
294- return fmt .Errorf ("deletePriceagentConfirmationHandler: failed to get priceagent from database: %w" , dbErr )
281+ return fmt .Errorf ("deletePriceagentConfirmationHandler: failed to parse callback data: %w" , parseErr )
295282 }
296283
297284 if _ , err := cb .Answer (b , & gotgbot.AnswerCallbackQueryOpts {}); err != nil {
298285 return fmt .Errorf ("deletePriceagentConfirmationHandler: failed to answer callback query: %w" , err )
299286 }
300287
301- linkName := createLink (priceagent .Entity . URL , priceagent .Entity .Name )
288+ linkName := createLink (priceagent .EntityURL () , priceagent .Entity .Name )
302289 editedText := fmt .Sprintf ("%s\n \n Möchtest du den Preisagenten für %s wirklich löschen?" , bold ("Löschen bestätigen" ), linkName )
303290 markup := gotgbot.InlineKeyboardMarkup {
304291 InlineKeyboard : [][]gotgbot.InlineKeyboardButton {
@@ -324,15 +311,10 @@ func deletePriceagentHandler(b *gotgbot.Bot, ctx *ext.Context) error {
324311 }
325312
326313 // Get Priceagent from DB
327- priceagentID , parseErr := parseIDFromCallbackData ( cb . Data , "m04_99_" )
314+ _ , priceagent , parseErr := parseMenuPriceagent ( ctx )
328315 if parseErr != nil {
329- return fmt .Errorf ("deletePriceagentHandler: failed to parse priceagentID from callback data: %w" , parseErr )
330- }
331-
332- priceagent , dbErr := database .GetPriceagentForUserByID (ctx .EffectiveUser .Id , priceagentID )
333- if dbErr != nil {
334316 ctx .EffectiveMessage .Reply (b , "Der Preisagent existiert nicht mehr, vielleicht wurde er schon gelöscht?" , & gotgbot.SendMessageOpts {})
335- return fmt .Errorf ("deletePriceagentHandler: failed to get priceagent from database : %w" , dbErr )
317+ return fmt .Errorf ("deletePriceagentHandler: failed to parse callback data : %w" , parseErr )
336318 }
337319
338320 deleteErr := database .DeletePriceAgentForUser (priceagent )
@@ -341,11 +323,11 @@ func deletePriceagentHandler(b *gotgbot.Bot, ctx *ext.Context) error {
341323 return fmt .Errorf ("deletePriceagentHandler: failed to delete priceagent from database: %w" , deleteErr )
342324 }
343325
344- editText := fmt .Sprintf ("Preisagent für %s wurde gelöscht!" , bold (createLink (priceagent .Entity . URL , priceagent .Entity .Name )))
326+ editText := fmt .Sprintf ("Preisagent für %s wurde gelöscht!" , bold (createLink (priceagent .EntityURL () , priceagent .Entity .Name )))
345327
346328 _ , err := cb .Message .EditText (b , editText , & gotgbot.EditMessageTextOpts {ParseMode : "HTML" , DisableWebPagePreview : true })
347329 if err != nil {
348- return fmt .Errorf ("deletePriceagent : failed to edit message text: %w" , err )
330+ return fmt .Errorf ("deletePriceagentHandler : failed to edit message text: %w" , err )
349331 }
350332 return nil
351333}
@@ -468,14 +450,17 @@ func Start(botConfig config.Config) {
468450 }
469451 log .Printf ("Starting webhook on '%s:%d%s'...\n " , botConfig .Webhook .ListenIP , botConfig .Webhook .ListenPort , botConfig .Webhook .ListenPath )
470452 // TODO add support for custom certificates
471- err := updater .StartWebhook (bot , ext.WebhookOpts {
453+ startErr := updater .StartWebhook (bot , ext.WebhookOpts {
472454 Listen : botConfig .Webhook .ListenIP ,
473455 Port : botConfig .Webhook .ListenPort ,
474456 URLPath : parsedURL .Path ,
475457 })
476- bot .SetWebhook (botConfig .Webhook .URL , & gotgbot.SetWebhookOpts {})
477- if err != nil {
478- panic ("failed to start webhook: " + err .Error ())
458+ if startErr != nil {
459+ panic ("failed to start webhook: " + startErr .Error ())
460+ }
461+ _ , setWebhookErr := bot .SetWebhook (botConfig .Webhook .URL , & gotgbot.SetWebhookOpts {})
462+ if setWebhookErr != nil {
463+ panic ("failed to set webhook: " + setWebhookErr .Error ())
479464 }
480465 } else {
481466 log .Println ("Start polling..." )
@@ -510,3 +495,17 @@ func Start(botConfig config.Config) {
510495
511496 updater .Idle ()
512497}
498+
499+ func parseMenuPriceagent (ctx * ext.Context ) (models.Menu , models.PriceAgent , error ) {
500+ menu , parseMenuErr := models .NewMenu (ctx .CallbackQuery .Data )
501+ if parseMenuErr != nil {
502+ return models.Menu {}, models.PriceAgent {}, fmt .Errorf ("invalid callback data: %s" , ctx .CallbackQuery .Data )
503+ }
504+
505+ priceAgent , dbErr := database .GetPriceagentForUserByID (ctx .EffectiveUser .Id , menu .PriceAgentID )
506+ if dbErr != nil {
507+ return models.Menu {}, models.PriceAgent {}, fmt .Errorf ("invalid callback data: %s" , ctx .CallbackQuery .Data )
508+ }
509+
510+ return * menu , priceAgent , nil
511+ }
0 commit comments