telegram重新登录(telegram操作频繁)
本文将探讨如何使用Golang构建Telegram聊天机器人,并将其与Cohere API集成以进行自然语言生成。
获取Cohere API密钥在Cohere网站)上注册账户。一旦您拥有一个账户,请按照以下步骤获取API密钥:登录您的Cohere账户。导航到账户设置中的API密钥部分。如果您没有API密钥,请生成一个API密钥。将生成的API密钥复制到您的代码中以使用。设置你的Telegram机器人打开Telegram应用并搜索BotFather。与BotFather开始聊天并按照指示操作。使用/newbot命令创建一个新的机器人。为你的机器人提供一个名称。选择一个机器人的用户名。
一旦你的机器人被创建,BotFather将为你提供一个机器人令牌。我们将保留这一点,以便以后使用。
在我们开始之前,请确保你的机器上已经安装了Go。你可以从Go的官方网站下载并安装它。
或者你可以像我一样使用GitHub Codespaces。
设置你的项目 为你的项目创建一个新的目录并导航到它。创建一个名为main.go的文件,将所有的花哨代码放进去。touch main.go使用以下命令初始化一个新的Go模块:go mod init <module-name>运行以下命令在终端中安装所需的依赖项:go get github.com/NicoNex/echotron/v3
go get github.com/cohere-ai/cohere-go让我们看看代码
导入依赖项:
导入所需的包和依赖项以供我们的聊天机器人使用。log: 用于记录消息strings: 用于字符串操作time: 用于与时间相关的操作echotron: 使用Go编写的Telegram机器人API库cohere-go: 使用Go编写的Cohere
package main import
类型定义:
type stateFn func stateFn
在这里,我们定义了一个自定义类型 stateFn,它表示一个以 echotron.Update为参数并返回另一个 stateFn 函数的函数。
Bot 结构体:
type bot struct { chatID int64 echotron.API cohereClient *cohere.Client state stateFn
我们定义一个bot结构体,封装了我们的聊天机器人所需的必要字段,例如:
chatID 存储聊天的 IDechotron.API 与 Telegram Bot API 进行交互cohereClient 与 Cohere API 进行交互state 用于跟踪当前状态函数。
API密钥和命令:
var
这里,我们声明了用于Telegram Bot API的API密钥和用于Cohere API的API密钥的变量。
此外,我们定义了一个包含echotron.BotCommand结构体的数组,以表示机器人命令及其描述。
func newBot echotron.Bot { cohereClient, err := cohere.CreateClient if err != nil { log.Fatalln } b := &bot{ chatID: chatID, API: echotron.NewAPI, cohereClient: cohereClient, } b.state = b.handleMessage return b }
这个函数由Echotron调度程序调用,为每个与其交互的聊天创建一个新的机器人实例。
它初始化一个新的Cohere客户端,使用提供的chatID创建一个机器人实例,设置Echotron API与Telegram Bot API token,并将初始状态设置为handleMessage。
处理提示:
func handlePrompt stateFn { b.SendChatAction response, err := b.generateText) if err != nil { log.Println b.SendMessage return b.handleMessage } b.SendMessage return b.handleMessage }
这个方法处理用户提示并使用Cohere API生成响应。
它发送一个“typing”聊天动作来指示机器人正在处理请求,根据用户提示使用generateText方法生成响应,并将响应发送回聊天。
如果在文本生成过程中发生错误,它会记录错误,发送错误消息,并转换回handleMessage状态。
处理消息:
func handleMessage stateFn { switch m := message; { case strings.HasPrefix: b.SendMessage case strings.HasPrefix: b.SendMessage return b.handlePrompt } return b.handleMessage }
这个方法处理机器人接收到的不同消息命令。
它使用 switch 语句检查消息内容。如果消息以“/start”开头:它向聊天发送“Hello world”消息。如果消息以“/generate”开头:它会提示用户输入一个提示并转换到 handlePrompt 状态。如果没有满足条件的情况,它将保持在 handleMessage 状态。
更新机器人状态:
func Update { b.state = b.state }
这种方法需要实现echotron.Bot接口。它会根据接收到的更新更新机器人的当前状态。
使用Cohere API生成文本:
func generateText { options := cohere.GenerateOptions{ Model: "command", Prompt: prompt, MaxTokens: 300, Temperature: 0.9, K: 0, StopSequences: []string{}, ReturnLikelihoods: "NONE", } response, err := b.cohereClient.Generate if err != nil { return "", err } return response.Generations[0].Text, nil }
这个方法使用 Cohere 的 API 生成文本。
它以提示作为输入,并返回生成的文本或错误。它创建了一个 GenerateOptions 结构,其中包含各种文本生成选项,例如模型、提示、蕞大标记、温度等。然后它调用 cohereClient 的 Generate 方法,根据提供的选项生成文本。如果在生成过程中出现错误,则返回错误。否则,它返回生成的文本。
提取消息:
func message string { if u.Message != nil { return u.Message.Text } else if u.EditedMessage != nil { return u.EditedMessage.Text } else if u.CallbackQuery != nil { return u.CallbackQuery.Data } return "" }
此函数从给定的更新中提取消息。
它检查更新的不同消息类型,并返回相应的文本。如果没有满足条件,则返回一个空字符串。
主要函数:
func main { echotron.NewAPI.SetMyCommands dsp := echotron.NewDispatcher for { err := dsp.Poll if err != nil { log.Println } time.Sleep } }
main 函数作为我们聊天机器人的入口点。
它使用 Telegram Bot API token 初始化 Echotron 并设置机器人命令。它使用 token 和 newBot 函数作为参数创建新的调度程序。调度程序不断轮询更新并相应地处理它们。如果在轮询过程中发生错误,则记录错误日志。程序在重试轮询过程之前休眠 5 秒。
使用.gitignore保护API密钥:
为了保护您的API密钥并防止它们被提交和推送到远程存储库,您可以使用.gitignore文件。下面是您可以执行的步骤:
在项目的根目录中创建一个名为.gitignore的新文件。打开 .gitignore 文件并添加以下行:tgtoken
chtoken这些行指定Git应忽略的文件或模式。保存.gitignore文件。
通过将tgtoken和chtoken添加到.gitignore文件中,Git将忽略这些文件并不会包含在您的代码库中。
请确保将您的API密钥存储在单独的文件中,并将它们添加到.gitignore文件中以保持私密。
运行您的代码:
go run main.go
我觉得我在这里漏掉了什么,但是 go run main.go 运行正常,所以……
测试您的机器人:
以下是 main.go 的代码:
package main import type stateFn func stateFn type bot struct { chatID int64 echotron.API cohereClient *cohere.Client state stateFn } var func newBot echotron.Bot { cohereClient, err := cohere.CreateClient if err != nil { log.Fatalln } b := &bot{ chatID: chatID, API: echotron.NewAPI, cohereClient: cohereClient, } b.state = b.handleMessage return b } func handlePrompt stateFn { b.SendChatAction response, err := b.generateText) if err != nil { log.Println b.SendMessage return b.handleMessage } b.SendMessage return b.handleMessage } func handleMessage stateFn { switch m := message; { case strings.HasPrefix: b.SendMessage case strings.HasPrefix: b.SendMessage return b.handlePrompt } return b.handleMessage } // This method is needed to implement the echotron.Bot interface. func Update { b.state = b.state } // Generate text using the Cohere API func generateText { options := cohere.GenerateOptions{ Model: "command", Prompt: prompt, MaxTokens: 300, Temperature: 0.9, K: 0, StopSequences: []string{}, ReturnLikelihoods: "NONE", } response, err := b.cohereClient.Generate if err != nil { return "", err } return response.Generations[0].Text, nil } // Returns the message from the given update. func message string { if u.Message != nil { return u.Message.Text } else if u.EditedMessage != nil { return u.EditedMessage.Text } else if u.CallbackQuery != nil { return u.CallbackQuery.Data } return "" } func main { echotron.NewAPI.SetMyCommands // This is the entry point of echotron library. dsp := echotron.NewDispatcher for { err := dsp.Poll if err != nil { log.Println } // In case of connection issues, wait 5 seconds before trying to reconnect. time.Sleep } }
结论
太棒了!我们使用Cohere的API创建了一个文本生成机器人,并在Telegram上部署了它。
你现在可以拿着这个并扩展你的聊天机器人的功能。
你可以在这里了解更多关于Echotron的内容。
海外精品引流脚本–最强海外引流
唯一TG:https://t.me/Facebook181818
更多海外引流脚本方案
如果你需要脚本演示、部署咨询或海外获客方案,可以通过下面入口继续查看。
