Crisp_Telegram_bot/main.go

112 lines
3.2 KiB
Go
Raw Normal View History

2019-10-03 08:06:12 +03:00
package main
import (
"encoding/json"
"fmt"
"log"
"strconv"
"time"
"github.com/crisp-im/go-crisp-api/crisp"
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api"
2021-03-19 15:50:32 +03:00
"github.com/l0sted/Crisp_Telegram_bot/utils"
"github.com/spf13/viper"
2019-10-03 08:06:12 +03:00
)
var bot *tgbotapi.BotAPI
var client *crisp.Client
2019-10-03 08:06:12 +03:00
var config *viper.Viper
// CrispMessageInfo stores the original message
type CrispMessageInfo struct {
WebsiteID string
SessionID string
}
// MarshalBinary serializes CrispMessageInfo into binary
func (s *CrispMessageInfo) MarshalBinary() ([]byte, error) {
return json.Marshal(s)
}
// UnmarshalBinary deserializes CrispMessageInfo into struct
func (s *CrispMessageInfo) UnmarshalBinary(data []byte) error {
return json.Unmarshal(data, s)
}
2021-03-19 15:56:23 +03:00
//from crisp to tg
2019-10-03 08:06:12 +03:00
func sendMsgToAdmins(text string, WebsiteID string, SessionID string) {
for _, id := range config.Get("admins").([]interface{}) {
2019-10-04 17:20:21 +03:00
msg := tgbotapi.NewMessage(int64(id.(int)), text)
2019-10-03 08:06:12 +03:00
msg.ParseMode = "Markdown"
sent, _ := bot.Send(msg)
log.Println(strconv.Itoa(sent.MessageID))
2019-10-03 08:06:12 +03:00
}
}
func main() {
2019-10-03 08:06:12 +03:00
config = utils.GetConfig()
2021-03-19 16:15:23 +03:00
var chat_prefix = config.GetString("prefix")
2019-10-03 08:06:12 +03:00
var err error
log.Printf("Initializing Bot...")
bot, err = tgbotapi.NewBotAPI(config.GetString("telegram.key"))
if err != nil {
log.Panic(err)
}
bot.Debug = config.GetBool("debug")
bot.RemoveWebhook()
log.Printf("Authorized on account %s", bot.Self.UserName)
log.Printf("Initializing Crisp Listner")
client = crisp.New()
// Set authentication parameters
// client.Authenticate(config.GetString("crisp.identifier"), config.GetString("crisp.key"))
client.AuthenticateTier("plugin", config.GetString("crisp.identifier"), config.GetString("crisp.key"))
2019-10-03 08:06:12 +03:00
// Connect to realtime events backend and listen (only to 'message:send' namespace)
client.Events.Listen(
[]string{
"message:send",
},
func(reg *crisp.EventsRegister) {
// Socket is connected: now listening for events
// Notice: if the realtime socket breaks at any point, this function will be called again upon reconnect (to re-bind events)
// Thus, ensure you only use this to register handlers
// Register handler on 'message:send/text' namespace
reg.On("message:send/text", func(evt crisp.EventsReceiveTextMessage) {
2021-11-24 12:49:49 +03:00
text := fmt.Sprintf(`%s *%s: *%s`, chat_prefix, *evt.User.Nickname, *evt.Content)
2019-10-03 08:06:12 +03:00
sendMsgToAdmins(text, *evt.WebsiteID, *evt.SessionID)
})
// Register handler on 'message:send/file' namespace
reg.On("message:send/file", func(evt crisp.EventsReceiveFileMessage) {
2021-11-24 12:49:49 +03:00
text := fmt.Sprintf(`%s *%s: *[File](%s)`, chat_prefix, *evt.User.Nickname, evt.Content.URL)
2019-10-03 08:06:12 +03:00
sendMsgToAdmins(text, *evt.WebsiteID, *evt.SessionID)
})
// Register handler on 'message:send/animation' namespace
reg.On("message:send/animation", func(evt crisp.EventsReceiveAnimationMessage) {
2021-11-24 12:49:49 +03:00
text := fmt.Sprintf(`%s *%s: *[Animation](%s)`, chat_prefix, *evt.User.Nickname, evt.Content.URL)
2019-10-03 08:06:12 +03:00
sendMsgToAdmins(text, *evt.WebsiteID, *evt.SessionID)
})
},
func() {
log.Printf("Crisp listener disconnected, reconnecting...")
},
func() {
log.Fatal("Crisp listener error, check your API key or internet connection?")
},
)
for {
time.Sleep(1 * time.Second)
}
2019-10-03 08:06:12 +03:00
}