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 error
	bot, err = api.NewBotAPI(botToken)
	if err != nil {
		log.Panic(err)
	}
	bot.Debug = debug
	log.Printf("Authorized on account: %s  ID: %d", bot.Self.UserName, bot.Self.ID)

	u := api.NewUpdate(0)
	u.Timeout = 60

	updates, err := bot.GetUpdatesChan(u)
	if err != nil {
		panic("Can't get Updates")
	}
	for update := range updates {
		if update.Message == nil { // ignore any non-Message updates
			continue
		}
		go processUpdate(&update)
	}
}

定时检测是否有消息更新 每60秒检测一次

/**
 * 对于每一个update的单独处理
 */
func processUpdate(update *api.Update) {
	upmsg := update.Message
	gid := upmsg.Chat.ID
	uid := upmsg.From.ID
	text := 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.MessageConfig
	upmsg := update.Message
	gid := upmsg.Chat.ID
	uid := upmsg.From.ID
	replyText := 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 = true
		msg.ReplyToMessageID = upmsg.MessageID
		sendMessage(msg)
	}else if replyText == "" {
		log.Printf("14")
		msg = api.NewMessage(gid, "自动回复:"+upmsg.Text)
		msg.DisableWebPagePreview = true
		msg.ReplyToMessageID = upmsg.MessageID
		sendMessage(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 可以做很多事情如自动推送邮箱,推送新闻,搜索爬虫,还可以支付,充满无限遐想。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值