Init barebones Go Telegram bot with commands folder similar to the JS bot

This commit is contained in:
bdnugget 2025-05-28 12:08:44 +02:00
parent f5302c3dbf
commit 2c4ac42019
7 changed files with 124 additions and 1 deletions

View File

@ -1,3 +1,3 @@
# nignoggobot
Rewrite of nignogbot in Go
Rewrite of @nignogbot Telegram bot, but in Go

19
commands/command.go Normal file
View File

@ -0,0 +1,19 @@
package commands
import tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
type Command interface {
Name() string
Help() string
Execute(update tgbotapi.Update, bot *tgbotapi.BotAPI)
}
var commandRegistry = make(map[string]Command)
func Register(cmd Command) {
commandRegistry[cmd.Name()] = cmd
}
func All() map[string]Command {
return commandRegistry
}

29
commands/help.go Normal file
View File

@ -0,0 +1,29 @@
package commands
import (
"strings"
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
)
type HelpCommand struct{}
func (h HelpCommand) Name() string {
return "help"
}
func (h HelpCommand) Help() string {
return "Shows available commands."
}
func (h HelpCommand) Execute(update tgbotapi.Update, bot *tgbotapi.BotAPI) {
var helpText strings.Builder
for _, cmd := range All() {
helpText.WriteString("/" + cmd.Name() + " - " + cmd.Help() + "\n")
}
msg := tgbotapi.NewMessage(update.Message.Chat.ID, helpText.String())
bot.Send(msg)
}
func init() {
Register(HelpCommand{})
}

28
commands/info.go Normal file
View File

@ -0,0 +1,28 @@
package commands
import (
"log"
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
)
type InfoCommand struct{}
func (i InfoCommand) Name() string {
return "info"
}
func (i InfoCommand) Help() string {
return "Displays information about the bot."
}
func (i InfoCommand) Execute(update tgbotapi.Update, bot *tgbotapi.BotAPI) {
msg := tgbotapi.NewMessage(update.Message.Chat.ID, "This bot does XYZ.")
_, err := bot.Send(msg)
if err != nil {
log.Println("Failed to send info message:", err)
}
}
func init() {
Register(InfoCommand{})
}

5
go.mod Normal file
View File

@ -0,0 +1,5 @@
module nignoggobot
go 1.24.3
require github.com/go-telegram-bot-api/telegram-bot-api/v5 v5.5.1

2
go.sum Normal file
View File

@ -0,0 +1,2 @@
github.com/go-telegram-bot-api/telegram-bot-api/v5 v5.5.1 h1:wG8n/XJQ07TmjbITcGiUaOtXxdrINDz1b0J1w0SzqDc=
github.com/go-telegram-bot-api/telegram-bot-api/v5 v5.5.1/go.mod h1:A2S0CWkNylc2phvKXWBBdD3K0iGnDBGbzRpISP2zBl8=

40
main.go Normal file
View File

@ -0,0 +1,40 @@
package main
import (
"log"
"os"
"nignoggobot/commands"
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
_ "nignoggobot/commands" // ensure init() is called
)
func main() {
bot, err := tgbotapi.NewBotAPI(os.Getenv("TELEGRAM_TOKEN"))
log.Println(os.Getenv("TELEGRAM_TOKEN"))
if err != nil {
log.Fatal(err)
}
log.Printf("Authorized on account %s", bot.Self.UserName)
u := tgbotapi.NewUpdate(0)
u.Timeout = 60
updates := bot.GetUpdatesChan(u)
for update := range updates {
if update.Message == nil || !update.Message.IsCommand() {
continue
}
cmdName := update.Message.Command()
if cmd, ok := commands.All()[cmdName]; ok {
cmd.Execute(update, bot)
} else {
msg := tgbotapi.NewMessage(update.Message.Chat.ID, "Unknown command.")
bot.Send(msg)
}
}
}