diff --git a/patches/0001-nuzzles.patch b/patches/0001-nuzzles.patch
index 3c579df..2c99613 100644
--- a/patches/0001-nuzzles.patch
+++ b/patches/0001-nuzzles.patch
@@ -1,6 +1,6 @@
--- a/config/config.go
+++ b/config/config.go
-@@ -8,14 +8,15 @@ import (
+@@ -8,14 +8,15 @@
)
type Config struct {
@@ -24,7 +24,7 @@
}
func (c *Config) LoadConfig() error {
-@@ -47,6 +48,7 @@ func (c *Config) CreateConfig() error {
+@@ -47,6 +48,7 @@
ApprovalMessage: "",
SendApprovalMessage: false,
DeleteRequestAfterDecision: false,
@@ -32,10 +32,9 @@
}
encoder := yaml.NewEncoder(f)
-
--- a/handlers/callbacks.go
+++ b/handlers/callbacks.go
-@@ -36,6 +36,7 @@ func (bot *Bot) HandleCallbackQuery(query *api.CallbackQuery) {
+@@ -36,6 +36,7 @@
switch action {
case "approve":
bot.handleApproveRequest(query, user, userString, adminUserString)
@@ -43,7 +42,7 @@
case "decline":
bot.handleDeclineRequest(query, user, userString, adminUserString)
case "ban":
-@@ -44,10 +45,19 @@ func (bot *Bot) HandleCallbackQuery(query *api.CallbackQuery) {
+@@ -44,10 +45,19 @@
return
case "banc":
bot.handleBanRequest(query, user, userString, adminUserString)
@@ -65,7 +64,7 @@
if bot.Config.DeleteRequestAfterDecision {
go bot.scheduleMessageDeletion(query.Message.Chat.ID, query.Message.MessageID, 10*time.Second)
}
-@@ -93,14 +103,39 @@ func (bot *Bot) handleDeclineRequest(query *api.CallbackQuery, user *ExtendedCha
+@@ -93,14 +103,39 @@
return
}
@@ -111,7 +110,7 @@
bot.API.Request(api.NewCallback(query.ID, "Join request declined."))
}
-@@ -175,12 +210,14 @@ func (bot *Bot) HandleDeclineReason(update *api.Update) {
+@@ -175,12 +210,14 @@
userID, username, joinReason, declinedBy, declinedAt := utils.GetInfoFromMsg(repliedMsg.Text)
reason := utils.EscapeHTML(update.Message.Text)
@@ -128,7 +127,7 @@
utils.EditMessage(bot.API, update.Message.Chat.ID, repliedMsg.MessageID,
fmt.Sprintf(AdminDeclinedMsg, username, userID, joinReason, declinedBy, declinedAt, reason))
-@@ -188,6 +225,26 @@ func (bot *Bot) HandleDeclineReason(update *api.Update) {
+@@ -188,6 +225,26 @@
bot.API.Send(api.NewDeleteMessage(update.Message.Chat.ID, update.Message.MessageID))
}
@@ -155,10 +154,10 @@
// parseCallbackData parses the action and user ID from a callback query's data string.
func parseCallbackData(data string) (action string, userID int64, err error) {
normalized := strings.Join(strings.Split(data, "_"), " ")
-
---- a/handlers/handlers.go
-+++ b/handlers/handlers.go
-@@ -13,7 +13,7 @@ const (
+--- a/handlers/handlers.go 2026-03-10
++++ b/handlers/handlers.go 2026-03-11
+
+@@ -13,7 +13,7 @@
AdminDeclinedMsg = "❌ Join #request declined for %s [%d]\n\nJoin reason: %s\nDeclined by: %s\nDeclined at: %s\nDeclined reason: %s"
AdminBannedMsg = "🚫 Join #request banned for %s [%d]\n\nJoin reason: %s\nBanned by: %s\nBanned at: %s\nBanned until: %s"
AdminFailedMsg = "⚠️ Join #request failed for %s [%d]\n\nJoin reason: %s\nFailure reason: %s"
@@ -167,3 +166,15 @@
)
// Types shared by handler files
+diff -ruN '--exclude=.git' '--exclude=.gitmodules' '--exclude=telegram-join-approval-bot' telegram-join-approval-bot/pkg/utils/utils.go telegram-join-approval-nuzzles/pkg/utils/utils.go
+--- a/pkg/utils/utils.go 2026-03-10
++++ b/pkg/utils/utils.go 2026-03-11
+@@ -38,7 +38,7 @@
+ func NewApprovalKeyboard(userID int64) api.InlineKeyboardMarkup {
+ approveBtn := api.NewInlineKeyboardButtonData("Approve", fmt.Sprintf("approve_%d", userID))
+ declineBtn := api.NewInlineKeyboardButtonData("Decline", fmt.Sprintf("decline_%d", userID))
+- banBtn := api.NewInlineKeyboardButtonData("Ban", fmt.Sprintf("ban_%d", userID))
++ banBtn := api.NewInlineKeyboardButtonData("Ban (24h)", fmt.Sprintf("ban_%d", userID))
+ return api.NewInlineKeyboardMarkup(
+ []api.InlineKeyboardButton{approveBtn, declineBtn},
+ []api.InlineKeyboardButton{banBtn},