From: Javier Sancho Date: Tue, 7 Nov 2017 16:19:53 +0000 (+0100) Subject: Initial commit X-Git-Url: https://git.jsancho.org/?a=commitdiff_plain;h=48a6f7ba6c6435a4e973745fceef07b521de81ff;p=midgaard_bot.git Initial commit --- 48a6f7ba6c6435a4e973745fceef07b521de81ff diff --git a/midgaard_bot.go b/midgaard_bot.go new file mode 100644 index 0000000..d4c3410 --- /dev/null +++ b/midgaard_bot.go @@ -0,0 +1,66 @@ +package main + +import ( + "context" + "log" + + "github.com/go-telegram-bot-api/telegram-bot-api" + "github.com/jessevdk/go-flags" +) + +var config struct { + Token string `short:"t" long:"token" description:"Telegram API Token" required:"true"` +} + +func recv_task(bot *tgbotapi.BotAPI, sendChannel chan tgbotapi.Chattable, ctx context.Context) { + u := tgbotapi.NewUpdate(0) + u.Timeout = 60 + + updates, _ := bot.GetUpdatesChan(u) + + for { + select { + case update := <-updates: + log.Printf("[%s] %s", update.Message.From.UserName, update.Message.Text) + + msg := tgbotapi.NewMessage(update.Message.Chat.ID, update.Message.Text) + msg.ReplyToMessageID = update.Message.MessageID + sendChannel <- msg + case <-ctx.Done(): + return + } + } +} + +func send_task(bot *tgbotapi.BotAPI, sendChannel chan tgbotapi.Chattable, ctx context.Context) { + for { + select { + case msg := <-sendChannel: + bot.Send(msg) + case <-ctx.Done(): + return + } + } +} + +func main() { + _, err := flags.Parse(&config) + if err != nil { + log.Panic(err) + } + + bot, err := tgbotapi.NewBotAPI(config.Token) + if err != nil { + log.Panic(err) + } + + bot.Debug = true + + log.Printf("Authorized on account %s", bot.Self.UserName) + + ctx, cancel := context.WithCancel(context.Background()) + sendChannel := make(chan tgbotapi.Chattable) + go send_task(bot, sendChannel, ctx) + recv_task(bot, sendChannel, ctx) + cancel() +}