Go实现自动回复的Tg bot机器人
生活随笔
收集整理的這篇文章主要介紹了
Go实现自动回复的Tg bot机器人
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1.準(zhǔn)備工作
? ? ? ? 首先我們先從Botfather機(jī)器人之父那里創(chuàng)建一個 bot,然后保存好token。
? ? ? ? 把創(chuàng)建好的bot 拉進(jìn)去群組,并把bot 設(shè)置成管理員。
2.開始Go代碼
? ? ? ? 首先我們在go.mod 里 引用包:
github.com/go-telegram-bot-api/telegram-bot-api???????這個 telegram-bot-api 是集成好的?telegram 的接口API,方便我們調(diào)用。
? ? ? ?初始化接口
func start(botToken string) {var err errorbot, err = api.NewBotAPI(botToken)if err != nil {log.Panic(err)}bot.Debug = debuglog.Printf("Authorized on account: %s ID: %d", bot.Self.UserName, bot.Self.ID)u := api.NewUpdate(0)u.Timeout = 60updates, err := bot.GetUpdatesChan(u)if err != nil {panic("Can't get Updates")}for update := range updates {if update.Message == nil { // ignore any non-Message updatescontinue}go processUpdate(&update)} }定時檢測是否有消息更新 每60秒檢測一次
/*** 對于每一個update的單獨(dú)處理*/ func processUpdate(update *api.Update) {upmsg := update.Messagegid := upmsg.Chat.IDuid := upmsg.From.IDtext := upmsg.Text//檢查是不是新加的群或者新開的人log.Printf("用戶gid:%d", gid)log.Printf("用戶uid:%d", uid)log.Printf("用戶回text:%s", text)in := checkInGroup(gid)if !in { //不在就需要加入, 內(nèi)存中加一份, 數(shù)據(jù)庫中添加一條空規(guī)則記錄common.AddNewGroup(gid)db.AddNewGroup(gid)log.Printf("1")}if upmsg.IsCommand() {go processCommond(update)log.Printf("2")} else {go processReplyCommond(update)go processReply(update)//新用戶通過用戶名檢查是否是清真if upmsg.NewChatMembers != nil {log.Printf("3")for _, auser := range *(upmsg.NewChatMembers) {if checkQingzhen(auser.UserName) ||checkQingzhen(auser.FirstName) ||checkQingzhen(auser.LastName) {banMember(gid, uid, -1)}}}//檢查清真并剔除if checkQingzhen(upmsg.Text) {log.Printf("4")_, _ = bot.DeleteMessage(api.NewDeleteMessage(gid, upmsg.MessageID))banMember(gid, uid, -1)}} }?檢測消息列表 根據(jù)設(shè)置的規(guī)則回復(fù)不同的消息
func processReply(update *api.Update) {log.Printf("5")var msg api.MessageConfigupmsg := update.Messagegid := upmsg.Chat.IDuid := upmsg.From.IDreplyText := findKey(gid, upmsg.Text) //查詢是否包含相應(yīng)的自動回復(fù)規(guī)則log.Printf("自動回復(fù)規(guī)則replyText:%s", replyText)if replyText == "delete" {log.Printf("6")_, _ = bot.DeleteMessage(api.NewDeleteMessage(gid, upmsg.MessageID))} else if strings.HasPrefix(replyText, "ban") {log.Printf("7")_, _ = bot.DeleteMessage(api.NewDeleteMessage(gid, upmsg.MessageID))banMember(gid, uid, -1)} else if strings.HasPrefix(replyText, "kick") {log.Printf("8")_, _ = bot.DeleteMessage(api.NewDeleteMessage(gid, upmsg.MessageID))kickMember(gid, uid)} else if strings.HasPrefix(replyText, "photo:") {log.Printf("9")sendPhoto(gid, replyText[6:])} else if strings.HasPrefix(replyText, "gif:") {log.Printf("10")sendGif(gid, replyText[4:])} else if strings.HasPrefix(replyText, "video:") {log.Printf("11")sendVideo(gid, replyText[6:])} else if strings.HasPrefix(replyText, "file:") {log.Printf("12")sendFile(gid, replyText[5:])} else if replyText != "" {log.Printf("13")msg = api.NewMessage(gid, replyText)msg.DisableWebPagePreview = truemsg.ReplyToMessageID = upmsg.MessageIDsendMessage(msg)}else if replyText == "" {log.Printf("14")msg = api.NewMessage(gid, "自動回復(fù):"+upmsg.Text)msg.DisableWebPagePreview = truemsg.ReplyToMessageID = upmsg.MessageIDsendMessage(msg)} }發(fā)送文字消息
/*** 發(fā)送文字消息*/ func sendMessage(msg api.MessageConfig) api.Message {if msg.Text == "" {return api.Message{}}mmsg, err := bot.Send(msg)if err != nil {log.Println(err)}go deleteMessage(msg.ChatID, mmsg.MessageID)return mmsg }驗證:
?
如圖我們已經(jīng)實現(xiàn)了一個自動回復(fù)的機(jī)器人,使用Tg bot 可以做很多事情如自動推送郵箱,推送新聞,搜索爬蟲,還可以支付,充滿無限遐想。
總結(jié)
以上是生活随笔為你收集整理的Go实现自动回复的Tg bot机器人的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 科目三上海浦东邮佳考场心酸历程
- 下一篇: 真武三国java_2010年CPU第三季