118 lines
3 KiB
Go
118 lines
3 KiB
Go
package bot
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
"time"
|
|
|
|
botHandlers "govd/bot/handlers"
|
|
|
|
"github.com/PaulSonOfLars/gotgbot/v2"
|
|
"github.com/PaulSonOfLars/gotgbot/v2/ext"
|
|
"github.com/PaulSonOfLars/gotgbot/v2/ext/handlers"
|
|
"github.com/PaulSonOfLars/gotgbot/v2/ext/handlers/filters/callbackquery"
|
|
"github.com/PaulSonOfLars/gotgbot/v2/ext/handlers/filters/choseninlineresult"
|
|
"github.com/PaulSonOfLars/gotgbot/v2/ext/handlers/filters/inlinequery"
|
|
)
|
|
|
|
var AllowedUpdates = []string{
|
|
"message",
|
|
"callback_query",
|
|
"inline_query",
|
|
"chosen_inline_result",
|
|
}
|
|
|
|
func Start() {
|
|
token := os.Getenv("BOT_TOKEN")
|
|
if token == "" {
|
|
log.Fatalf("BOT_TOKEN is not provided")
|
|
}
|
|
b, err := gotgbot.NewBot(token, &gotgbot.BotOpts{
|
|
BotClient: NewBotClient(),
|
|
})
|
|
if err != nil {
|
|
log.Fatalf("failed to create bot: %v", err)
|
|
}
|
|
dispatcher := ext.NewDispatcher(&ext.DispatcherOpts{
|
|
Error: func(b *gotgbot.Bot, ctx *ext.Context, err error) ext.DispatcherAction {
|
|
// log.Println("an error occurred while handling update:", err.Error())
|
|
return ext.DispatcherActionNoop
|
|
},
|
|
MaxRoutines: 500,
|
|
})
|
|
updater := ext.NewUpdater(dispatcher, nil)
|
|
registerHandlers(dispatcher)
|
|
err = updater.StartPolling(b, &ext.PollingOpts{
|
|
DropPendingUpdates: true,
|
|
GetUpdatesOpts: &gotgbot.GetUpdatesOpts{
|
|
Timeout: 9,
|
|
RequestOpts: &gotgbot.RequestOpts{
|
|
Timeout: time.Second * 10,
|
|
},
|
|
AllowedUpdates: AllowedUpdates,
|
|
},
|
|
})
|
|
if err != nil {
|
|
log.Fatalf("failed to start polling: %v", err)
|
|
}
|
|
log.Printf("bot started on: %s\n", b.User.Username)
|
|
}
|
|
|
|
func registerHandlers(dispatcher *ext.Dispatcher) {
|
|
dispatcher.AddHandler(handlers.NewMessage(
|
|
botHandlers.URLFilter,
|
|
botHandlers.URLHandler,
|
|
))
|
|
dispatcher.AddHandler(handlers.NewCommand(
|
|
"start",
|
|
botHandlers.StartHandler,
|
|
))
|
|
dispatcher.AddHandler(handlers.NewCallback(
|
|
callbackquery.Equal("start"),
|
|
botHandlers.StartHandler,
|
|
))
|
|
dispatcher.AddHandler(handlers.NewCallback(
|
|
callbackquery.Equal("help"),
|
|
botHandlers.HelpHandler,
|
|
))
|
|
dispatcher.AddHandler(handlers.NewCommand(
|
|
"settings",
|
|
botHandlers.SettingsHandler,
|
|
))
|
|
dispatcher.AddHandler(handlers.NewCommand(
|
|
"captions",
|
|
botHandlers.CaptionsHandler,
|
|
))
|
|
dispatcher.AddHandler(handlers.NewCommand(
|
|
"nsfw",
|
|
botHandlers.NSFWHandler,
|
|
))
|
|
dispatcher.AddHandler(handlers.NewCommand(
|
|
"limit",
|
|
botHandlers.MediaGroupLimitHandler,
|
|
))
|
|
dispatcher.AddHandler(handlers.NewCallback(
|
|
callbackquery.Equal("stats"),
|
|
botHandlers.StatsHandler,
|
|
))
|
|
dispatcher.AddHandler(handlers.NewCallback(
|
|
callbackquery.Equal("extractors"),
|
|
botHandlers.ExtractorsHandler,
|
|
))
|
|
dispatcher.AddHandler(handlers.NewCallback(
|
|
callbackquery.Equal("instances"),
|
|
botHandlers.InstancesHandler,
|
|
))
|
|
dispatcher.AddHandler(handlers.NewInlineQuery(
|
|
inlinequery.All,
|
|
botHandlers.InlineDownloadHandler,
|
|
))
|
|
dispatcher.AddHandler(handlers.NewChosenInlineResult(
|
|
choseninlineresult.All,
|
|
botHandlers.InlineDownloadResultHandler,
|
|
))
|
|
dispatcher.AddHandler(handlers.NewCallback(
|
|
callbackquery.Equal("inline:loading"),
|
|
botHandlers.InlineLoadingHandler,
|
|
))
|
|
}
|