使用 Go-Telegram-Bot-Api 开发一个TG机器人 5(试着把自己的机器人打包一下吧GoReleaser)

发布于 2022-04-04  2079 次阅读


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

为什么要打包

最初写完了,直接右键run就可以了。 但是程序写完了毕竟是发布到服务器上或者给别人用的,你第一不可能让所有运行的人都装个eclipse,第二不可能把源代码公布给所有人。 所以你需要把你的代码发布成二进制形式,让其它环境方便运行,这就是打包

好处

不用去一个个安装依赖环境什么的了,直接运行即可,方便使用。

使用工具

1.codeserver(看前文1讲述安装方法)

2.GoReleaser - GoReleaser(Golang快捷打包工具)

3.学会go.mod包管理器使用

GoReleaser的功能

GoReleaser 是 Go 项目的发布自动化工具。目标是简化构建、发布和发布步骤,同时为所有步骤提供变体自定义选项。

GoReleaser是在构建CI工具的情况下构建的,您只需要在构建脚本中下载并执行它。当然,如果需要,您仍然可以在本地安装它。

您的发布过程可以通过文件进行自定义。.goreleaser.yaml

设置完成后,每次要创建新版本时,您需要做的就是标记并运行:goreleaser release

开始吧

安装goreleaser(其他教程推荐:golang 一键跨平台发布-goreleaser - 小幻博客 (52xhuan.cn)

go install github.com/goreleaser/goreleaser@latest

在前文项目根目录运行 goreleaser init 创建示例文件:.goreleaser.yaml

goreleaser init

我们给他来个名字,在最上面添加 project_name: demo1,demo1为名字

project_name: demo1

更多使用方法 goreleaser release - GoReleaser

此时我们需要修改export GO111MODULE=on

在程序目录下执行

export GO111MODULE=on

因为使用了 GO111MODULE=on ,也就是使用 go.mod 管理包,我们需要初始化一下 go.mod,这也是golang推荐的做法,,在程序目录下执行 go mod init 初始化 go.mod 文件,demo1为项目名字,随便取一个即可

go mod init demo1

此时,因为我们使用了go.mod包管理器,所以我们更换一下telegram bot api的包,将前文main.go文件的tgbotapi "gopkg.in/telegram-bot-api.v5"修改为,然后还需要将你的程序目录也就是这里的videos/IMG_0953.jpg修改为绝对路径

tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
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("/root/go/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)
		}
	}
}
 

现在,让我们运行一个"仅限本地"的版本,看看它是否可以使用 release 命令工作

goreleaser release --snapshot --rm-dist

如何将会在/dist目录下自动生成一批文件,cd进入 /dist/demo1_linux_amd64 然后运行 ./demo1试试看

cd /你的项目文件夹
cd /dist/demo1_linux_amd64
./demo1

到这里就差不多完成了一个打包项目

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