tg.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. package tg
  2. import (
  3. "time"
  4. tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
  5. "github.com/sirupsen/logrus"
  6. "github.com/spf13/viper"
  7. )
  8. func Start() {
  9. MainBot := NewBot()
  10. event2.On(EventSendMsg, event2.ListenerFunc(MainBot.onSendMsg))
  11. go func() {
  12. <-time.After(3 * time.Second)
  13. go StartGameTimer()
  14. go GameStart()
  15. }()
  16. botToken := viper.GetString("bot_token")
  17. logrus.Fatal(MainBot.InitDebug(botToken))
  18. }
  19. type Bot struct {
  20. botApi *tgbotapi.BotAPI
  21. updateChannel tgbotapi.UpdatesChannel
  22. }
  23. func NewBot() *Bot {
  24. return &Bot{}
  25. }
  26. func (p *Bot) onSendMsg(e event2.Event) error {
  27. logrus.Info("onSendMsg:", e)
  28. c := e.Get("msg").(tgbotapi.Chattable)
  29. resp, err := p.botApi.Send(c)
  30. if err != nil {
  31. logrus.Error(err)
  32. return nil
  33. }
  34. logrus.Info("send finish:", resp)
  35. return nil
  36. }
  37. func (p *Bot) InitDebug(token string) error {
  38. bot, err := tgbotapi.NewBotAPI(token)
  39. if err != nil {
  40. logrus.Fatal(err)
  41. return err
  42. }
  43. bot.Debug = true
  44. logrus.Infof("Authorized on account %s", bot.Self.UserName)
  45. delWebhookConfig := tgbotapi.DeleteWebhookConfig{
  46. DropPendingUpdates: true,
  47. }
  48. bot.Send(delWebhookConfig)
  49. hookCfg := tgbotapi.NewUpdate(0)
  50. hookCfg.AllowedUpdates = []string{tgbotapi.UpdateTypeChatMember, tgbotapi.UpdateTypeMessage,
  51. tgbotapi.UpdateTypeInlineQuery, tgbotapi.UpdateTypeCallbackQuery}
  52. bot.Debug = true
  53. p.botApi = bot
  54. p.updateChannel = bot.GetUpdatesChan(hookCfg)
  55. p.ProcNewMessage()
  56. return nil
  57. }
  58. func (p *Bot) Init(token string) error {
  59. bot, err := tgbotapi.NewBotAPI(token)
  60. if err != nil {
  61. logrus.Fatal(err)
  62. return err
  63. }
  64. bot.Debug = false
  65. logrus.Infof("Authorized on account %s", bot.Self.UserName)
  66. basePath := viper.GetString("base_path") // "/api/botzhenren"
  67. fullPath := "http://13.214.75.66:1180" + basePath
  68. if !viper.GetBool("is_debug") {
  69. fullPath = "https://prodcpbot.daxia.dev" + basePath
  70. }
  71. hookCfg, err := tgbotapi.NewWebhook(fullPath)
  72. if err != nil {
  73. logrus.Fatal(err)
  74. }
  75. hookCfg.AllowedUpdates = []string{tgbotapi.UpdateTypeChatMember, tgbotapi.UpdateTypeMessage,
  76. tgbotapi.UpdateTypeInlineQuery, tgbotapi.UpdateTypeCallbackQuery}
  77. _, err = bot.Request(hookCfg)
  78. if err != nil {
  79. logrus.Fatal(err)
  80. }
  81. info, err := bot.GetWebhookInfo()
  82. if err != nil {
  83. logrus.Fatal(err)
  84. }
  85. if info.LastErrorDate != 0 {
  86. logrus.Printf("Telegram callback failed: %s", info.LastErrorMessage)
  87. }
  88. p.updateChannel = bot.ListenForWebhook(basePath)
  89. p.botApi = bot
  90. p.ProcNewMessage()
  91. return nil
  92. }
  93. func (p *Bot) GetBotApi() *tgbotapi.BotAPI {
  94. return p.botApi
  95. }
  96. func (p *Bot) ProcNewMessage() {
  97. if p.updateChannel == nil {
  98. logrus.Error("updata channel is nil")
  99. return
  100. }
  101. for update := range p.updateChannel {
  102. logrus.Info("recv update msg:", update)
  103. go event2.MustFire(EventUpdateMsg, event2.M{
  104. "update": update,
  105. })
  106. }
  107. }