golang Telegram机器人API开发插件库micha的使用

golang Telegram机器人API开发插件库micha的使用

Micha是一个用于Telegram Bot API的Golang客户端库。

简单echo机器人示例

下面是一个简单的echo机器人示例,它会回复用户发送的任何消息:

package main

import (
    "log"
	
    "github.com/onrik/micha"
)

func main() {
    // 使用你的Telegram机器人token初始化bot
    bot, err := micha.NewBot("<token>")
    if err != nil {
        log.Println(err)
        return
    }

    // 启动机器人
    go bot.Start()

    // 处理接收到的消息
    for update := range bot.Updates() {
        if update.Message != nil {
            // 将用户发送的消息原样回复
            bot.SendMessage(update.Message.Chat.ID, update.Message.Text, nil)
        }
    }
}

自定义Telegram Bot API服务器示例

如果你想使用自定义的Telegram Bot API服务器,可以这样配置:

package main

import (
    "log"
	
    "github.com/onrik/micha"
)

func main() {
    // 使用自定义API服务器初始化bot
    bot, err := micha.NewBot(
        "<token>",
        micha.WithAPIServer("http://127.0.0.1:8081"), // 指定自定义API服务器地址
    )
    if err != nil {
        log.Println(err)
        return
    }

    // 登出示例(可选)
    err = bot.Logout()
    if err != nil {
        log.Println(err)
        return
    }

    // 启动机器人
    go bot.Start()

    // 处理接收到的消息
    for update := range bot.Updates() {
        if update.Message != nil {
            // 将用户发送的消息原样回复
            bot.SendMessage(update.Message.Chat.ID, update.Message.Text, nil)
        }
    }
}

使用说明

  1. 首先需要导入micha库:import "github.com/onrik/micha"
  2. 使用NewBot函数创建机器人实例,传入你的Telegram Bot Token
  3. 调用bot.Start()启动机器人(建议使用goroutine)
  4. 通过bot.Updates()通道接收消息更新
  5. 使用bot.SendMessage()等方法发送回复

注意:在实际使用时,请将<token>替换为你从BotFather获取的真实Telegram Bot Token。


更多关于golang Telegram机器人API开发插件库micha的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang Telegram机器人API开发插件库micha的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


使用micha库开发Golang Telegram机器人

micha是一个轻量级的Golang Telegram Bot API库,提供了简单易用的接口来开发Telegram机器人。下面我将介绍如何使用micha库开发Telegram机器人。

安装micha库

首先需要安装micha库:

go get github.com/onrik/micha

基本用法

1. 创建机器人实例

package main

import (
	"log"
	"github.com/onrik/micha"
)

func main() {
	bot, err := micha.NewBot("YOUR_TELEGRAM_BOT_TOKEN")
	if err != nil {
		log.Fatal(err)
	}
	
	// 设置更新处理
	bot.Updates.Listen(updateHandler)
	
	// 启动机器人
	log.Println("Bot started")
	bot.Start()
}

func updateHandler(update micha.Update) {
	// 处理更新
}

2. 处理消息

func updateHandler(update micha.Update) {
	if update.Message == nil {
		return
	}
	
	msg := update.Message
	chatID := msg.Chat.ID
	
	if msg.IsCommand() {
		switch msg.Command() {
		case "start":
			bot.SendMessage(chatID, "欢迎使用本机器人!", nil)
		case "help":
			bot.SendMessage(chatID, "这是帮助信息", nil)
		default:
			bot.SendMessage(chatID, "未知命令", nil)
		}
	} else {
		bot.SendMessage(chatID, "你说了: "+msg.Text, nil)
	}
}

3. 发送不同类型的消息

// 发送带键盘的消息
func sendMessageWithKeyboard(chatID int64) {
	keyboard := micha.NewReplyKeyboard(
		micha.KeyboardRow{
			micha.KeyboardButton{Text: "按钮1"},
			micha.KeyboardButton{Text: "按钮2"},
		},
	)
	
	options := micha.SendOptions{
		ReplyMarkup: keyboard,
	}
	
	bot.SendMessage(chatID, "请选择一个选项:", &options)
}

// 发送图片
func sendPhoto(chatID int64) {
	photo := micha.NewInputFileFromURL("https://example.com/image.jpg")
	options := micha.SendOptions{
		Caption: "这是一张图片",
	}
	
	bot.SendPhoto(chatID, photo, &options)
}

// 发送内联键盘
func sendInlineKeyboard(chatID int64) {
	inlineKeyboard := micha.NewInlineKeyboard(
		micha.InlineKeyboardRow{
			micha.InlineKeyboardButton{
				Text:         "选项1",
				CallbackData: "option1",
			},
			micha.InlineKeyboardButton{
				Text:         "选项2",
				CallbackData: "option2",
			},
		},
	)
	
	options := micha.SendOptions{
		ReplyMarkup: inlineKeyboard,
	}
	
	bot.SendMessage(chatID, "请选择:", &options)
}

4. 处理回调查询

func updateHandler(update micha.Update) {
	if update.CallbackQuery != nil {
		callback := update.CallbackQuery
		chatID := callback.Message.Chat.ID
		data := callback.Data
		
		switch data {
		case "option1":
			bot.AnswerCallbackQuery(callback.ID, "你选择了选项1", false)
			bot.SendMessage(chatID, "你选择了选项1", nil)
		case "option2":
			bot.AnswerCallbackQuery(callback.ID, "你选择了选项2", false)
			bot.SendMessage(chatID, "你选择了选项2", nil)
		}
		return
	}
	
	// 处理普通消息...
}

高级功能

1. 使用中间件

func main() {
	bot, err := micha.NewBot("YOUR_TELEGRAM_BOT_TOKEN")
	if err != nil {
		log.Fatal(err)
	}
	
	// 添加中间件
	bot.Updates.Use(loggingMiddleware)
	bot.Updates.Use(authMiddleware)
	
	bot.Updates.Listen(updateHandler)
	bot.Start()
}

func loggingMiddleware(next micha.HandlerFunc) micha.HandlerFunc {
	return func(update micha.Update) {
		log.Printf("Received update: %+v", update)
		next(update)
	}
}

func authMiddleware(next micha.HandlerFunc) micha.HandlerFunc {
	return func(update micha.Update) {
		if update.Message != nil && update.Message.From.ID != ALLOWED_USER_ID {
			bot.SendMessage(update.Message.Chat.ID, "无权访问", nil)
			return
		}
		next(update)
	}
}

2. 处理文件上传

func handleFileUpload(update micha.Update) {
	if update.Message == nil || update.Message.Document == nil {
		return
	}
	
	fileID := update.Message.Document.FileID
	file, err := bot.GetFile(fileID)
	if err != nil {
		log.Println("Error getting file:", err)
		return
	}
	
	// 下载文件
	err = bot.DownloadFile(file.FilePath, "downloads/"+file.FileID)
	if err != nil {
		log.Println("Error downloading file:", err)
		return
	}
	
	bot.SendMessage(update.Message.Chat.ID, "文件已保存", nil)
}

3. 使用Webhook模式

func main() {
	bot, err := micha.NewBot("YOUR_TELEGRAM_BOT_TOKEN")
	if err != nil {
		log.Fatal(err)
	}
	
	// 设置Webhook
	err = bot.SetWebhook("https://yourdomain.com/webhook", nil)
	if err != nil {
		log.Fatal(err)
	}
	
	// 创建HTTP处理器
	http.HandleFunc("/webhook", func(w http.ResponseWriter, r *http.Request) {
		update, err := bot.HandleWebhookRequest(r)
		if err != nil {
			log.Println("Error handling webhook:", err)
			return
		}
		
		updateHandler(update)
	})
	
	log.Println("Starting server on :8080")
	log.Fatal(http.ListenAndServe(":8080", nil))
}

最佳实践

  1. 错误处理:始终检查API调用的错误
  2. 限流:Telegram API有调用频率限制,注意不要超过
  3. 状态管理:对于复杂的交互,考虑使用状态机
  4. 日志记录:记录重要事件和错误
  5. 测试:为关键功能编写测试

micha库提供了简洁的API来开发Telegram机器人,适合中小型项目。对于更复杂的需求,你可能需要考虑更全面的库如telegram-bot-api或telebot。

回到顶部