+/*
+midgaard_bot, a Telegram bot which sets a bridge to Midgaard Merc MUD
+Copyright (C) 2017 by Javier Sancho Fernandez <jsf at jsancho dot org>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
package main
import (
"context"
"log"
+ "os"
+ "os/signal"
- "github.com/go-telegram-bot-api/telegram-bot-api"
"github.com/jessevdk/go-flags"
)
-var config struct {
+type TelegramConfig 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
- }
- }
+type MercConfig struct {
+ Host string `short:"h" long:"host" description:"Host and port for Merc MUD" required:"true"`
}
-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
- }
- }
+var Config struct {
+ Telegram TelegramConfig `group:"Telegram config"`
+ Merc MercConfig `group:"Merc MUD config"`
}
func main() {
- _, err := flags.Parse(&config)
+ _, err := flags.Parse(&Config)
if err != nil {
log.Panic(err)
}
- bot, err := tgbotapi.NewBotAPI(config.Token)
+ ctx, cancel := context.WithCancel(context.Background())
+ defer cancel()
+
+ err = initSessions(Config.Merc.Host, ctx)
if err != nil {
log.Panic(err)
}
- bot.Debug = true
+ err = initTelegramWorkers(Config.Telegram.Token, ctx)
+ if err != nil {
+ log.Panic(err)
+ }
- log.Printf("Authorized on account %s", bot.Self.UserName)
+ intChannel := make(chan os.Signal, 1)
+ signal.Notify(intChannel, os.Interrupt)
+ <-intChannel
- ctx, cancel := context.WithCancel(context.Background())
- sendChannel := make(chan tgbotapi.Chattable)
- go send_task(bot, sendChannel, ctx)
- recv_task(bot, sendChannel, ctx)
- cancel()
+ log.Print("Exit")
}