Add shutdown and panic notifications and admin only commands
This commit is contained in:
parent
5df5dde506
commit
3ab37d88f4
12
commands/admin.go
Normal file
12
commands/admin.go
Normal file
@ -0,0 +1,12 @@
|
||||
package commands
|
||||
|
||||
var AdminIDs = []int64{126131628}
|
||||
|
||||
func IsAdmin(userID int64) bool {
|
||||
for _, id := range AdminIDs {
|
||||
if id == userID {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
37
commands/debug.go
Normal file
37
commands/debug.go
Normal file
@ -0,0 +1,37 @@
|
||||
package commands
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
|
||||
)
|
||||
|
||||
type DebugCommand struct{}
|
||||
|
||||
func (d DebugCommand) Name() string {
|
||||
return "debug"
|
||||
}
|
||||
|
||||
func (d DebugCommand) Help() string {
|
||||
return "Show debug info (admin only)"
|
||||
}
|
||||
|
||||
func (d DebugCommand) Execute(update tgbotapi.Update, bot *tgbotapi.BotAPI) {
|
||||
user := update.Message.From
|
||||
if user == nil || !IsAdmin(user.ID) {
|
||||
msg := tgbotapi.NewMessage(update.Message.Chat.ID, "You are not authorized to use this command.")
|
||||
bot.Send(msg)
|
||||
return
|
||||
}
|
||||
info := fmt.Sprintf("UserID: %d\nChatID: %d\nText: %s", user.ID, update.Message.Chat.ID, update.Message.Text)
|
||||
msg := tgbotapi.NewMessage(update.Message.Chat.ID, info)
|
||||
bot.Send(msg)
|
||||
|
||||
if update.Message.CommandArguments() == "panic" {
|
||||
panic("test panic")
|
||||
}
|
||||
}
|
||||
|
||||
func init() {
|
||||
Register(DebugCommand{})
|
||||
}
|
37
main.go
37
main.go
@ -1,8 +1,11 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"nignoggobot/commands"
|
||||
|
||||
@ -11,7 +14,41 @@ import (
|
||||
_ "nignoggobot/commands" // ensure init() is called
|
||||
)
|
||||
|
||||
var (
|
||||
devChannelID int64 = -1001327903329
|
||||
AdminIDs = []int64{126131628}
|
||||
)
|
||||
|
||||
func notifyShutdown(reason string) {
|
||||
token := os.Getenv("TELEGRAM_TOKEN")
|
||||
bot, err := tgbotapi.NewBotAPI(token)
|
||||
if err != nil {
|
||||
log.Println("Failed to create bot for shutdown notification:", err)
|
||||
return
|
||||
}
|
||||
msg := tgbotapi.NewMessage(devChannelID, "Bot shutting down/crashed: "+reason)
|
||||
bot.Send(msg)
|
||||
}
|
||||
|
||||
func main() {
|
||||
// Signal handling for SIGINT/SIGTERM
|
||||
sigs := make(chan os.Signal, 1)
|
||||
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
|
||||
go func() {
|
||||
sig := <-sigs
|
||||
notifyShutdown(fmt.Sprintf("Received signal: %v", sig))
|
||||
os.Exit(0)
|
||||
}()
|
||||
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
notifyShutdown("panic: " + fmt.Sprint(r))
|
||||
panic(r) // re-throw after notifying
|
||||
} else {
|
||||
notifyShutdown("normal shutdown")
|
||||
}
|
||||
}()
|
||||
|
||||
bot, err := tgbotapi.NewBotAPI(os.Getenv("TELEGRAM_TOKEN"))
|
||||
log.Println(os.Getenv("TELEGRAM_TOKEN"))
|
||||
if err != nil {
|
||||
|
Loading…
x
Reference in New Issue
Block a user