使用 Go-Telegram-Bot-Api 开发一个TG机器人 4(文件发送)

发布于 2022-03-31  1642 次阅读


前期: Go-TG-Bot开发 – Lean Demo (iepl.cc)

本章完成内容

  1. 参考文档让机器人发送文档

开始吧

打开CodeServer(参考1-2环境部署)

这个是go-tg-api的参考文档,虽然有点旧了,但不影响使用

文件 - Go Telegram Bot API (go-telegram-bot-api.dev)

这里我们展示其中FileReader的使用方法

FileReaderUse an to provide a file. Lazily read to save memory.io.Reader

我们先上传一个文件到你的CodeServer文件夹里,直接拖拽到浏览器就可以了

右击文件,点击复制相对路径即

参考手册

FileReader

Use an to provide file contents as needed. Requires a filename for the virtual file.io.Reader

var reader io.Reader

file := tgbotapi.FileReader{
    Name: "image.jpg",
    Reader: reader,
}

我们将reader赋值为我们要读取的文件,这里我们使用 os.Open 来读取文件,使用 tgbotapi.NewVideo 来发送文件

reader, _ := os.Open("videos/IMG_0953.jpg")

file2 := tgbotapi.FileReader{
	Name:   "image.jpg",
	Reader: reader,
}
msg2 := tgbotapi.NewVideo(update.Message.Chat.ID, file2)
//发送文件
bot.Send(msg2)

结合上回的复读机,我们将上面这段代码插进去

package main

import (
	"log"
	"os"
	"strconv"
	tgbotapi "gopkg.in/telegram-bot-api.v5"
)


//tg机器人
func main() {


	bot, err := tgbotapi.NewBotAPI("你的机器人密钥")
	if err != nil {
		log.Panic(err)
	}

	log.Printf("Authorized on account %s", bot.Self.UserName)

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

	updates := bot.GetUpdatesChan(u)

	for update := range updates {
		//如果发送的不是空的
		if update.Message == nil {
			continue
		}

		//如果发送的不是带有 / 的文字
		if !update.Message.IsCommand() {
			continue
		}

		//循环接收,判断指令发送
		switch update.Message.Command() {


		//发送文档方法
		//msg1 := tgbotapi.NewDocument(update.Message.Chat.ID, tgbotapi.FilePath("README.md"))
		//发送视频方法
		//msg2 := tgbotapi.NewVideo(update.Message.Chat.ID, tgbotapi.FilePath("videos/IBW-751.mp4"))

		reader, _ := os.Open("videos/IMG_0953.jpg")

		file2 := tgbotapi.FileReader{
			Name:   "image.jpg",
			Reader: reader,
		}
                //发送文档
		msg2 := tgbotapi.NewDocument(update.Message.Chat.ID, file2)

		if _, err := bot.Send(msg2); err != nil {
			log.Panic(err)
		}
	}
}

此时我们运行代码在机器人中发送任何带有 / 开头的语句(如 /start )机器人就会发送给你文件

届ける言葉を今は育ててる
最后更新于 2022-03-31