日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Go实现自动回复的Tg bot机器人

發布時間:2023/12/14 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Go实现自动回复的Tg bot机器人 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.準備工作

? ? ? ? 首先我們先從Botfather機器人之父那里創建一個 bot,然后保存好token。

? ? ? ? 把創建好的bot 拉進去群組,并把bot 設置成管理員。

2.開始Go代碼

? ? ? ? 首先我們在go.mod 里 引用包:

github.com/go-telegram-bot-api/telegram-bot-api

???????這個 telegram-bot-api 是集成好的?telegram 的接口API,方便我們調用。

? ? ? ?初始化接口

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的單獨處理*/ 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 { //不在就需要加入, 內存中加一份, 數據庫中添加一條空規則記錄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)}} }

?檢測消息列表 根據設置的規則回復不同的消息

func processReply(update *api.Update) {log.Printf("5")var msg api.MessageConfigupmsg := update.Messagegid := upmsg.Chat.IDuid := upmsg.From.IDreplyText := findKey(gid, upmsg.Text) //查詢是否包含相應的自動回復規則log.Printf("自動回復規則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, "自動回復:"+upmsg.Text)msg.DisableWebPagePreview = truemsg.ReplyToMessageID = upmsg.MessageIDsendMessage(msg)} }

發送文字消息

/*** 發送文字消息*/ 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 }

驗證:

?

如圖我們已經實現了一個自動回復的機器人,使用Tg bot 可以做很多事情如自動推送郵箱,推送新聞,搜索爬蟲,還可以支付,充滿無限遐想。

總結

以上是生活随笔為你收集整理的Go实现自动回复的Tg bot机器人的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。