You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: chat.go
    path of file: ./repos/ZeroBot-Plugin/plugin/chat
    
    the code of the file until where you have to start completion: // Package chat å¯¹è¯æ’ä»¶
package chat

import (
	"math/rand"
	"strconv"
	"time"

	ctrl "github.com/FloatTech/zbpctrl"
	"github.com/FloatTech/zbputils/control"
	zero "github.com/wdvxdr1123/ZeroBot"
	"github.com/wdvxdr1123/ZeroBot/extension/rate"
	"github.com/wdvxdr1123/ZeroBot/message"
)

var (
	poke   = rate.NewManager[int64](time.Minute*5, 8) // æˆ³ä¸€æˆ³
	engine = control.AutoRegister(&ctrl.Options[*zero.Ctx]{
		DisableOnDefault: false,
		Brief:            "åŸºç¡€ååº”, ç¾¤ç©ºè°ƒ",
		Help:             "chat\n- [BOTåå­—]\n- [æˆ³ä¸€æˆ³BOT]\n- ç©ºè°ƒå¼€\n- ç©ºè°ƒå…³\n- ç¾¤æ¸©åº¦\n- è®¾ç½®æ¸©åº¦[æ­£æ•´æ•°]",
	})
)

func init() { // æ’ä»¶ä¸»ä½“
	// è¢«å–Šåå­—
	engine.OnFullMatch("", zero.OnlyToMe).SetBlock(true).
		Handle(func(ctx *zero.Ctx) {
			var nickname = zero.BotConfig.NickName[0]
			time.Sleep(time.Second * 1)
			ctx.SendChain(message.Text(
				[]string{
					nickname + "åœ¨æ­¤ï¼Œæœ‰ä½•è´µå¹²~",
					"(ã£â—Ï‰â—)ã£åœ¨~",
					"è¿™é‡Œæ˜¯" + nickname + "(ã£â—Ï‰â—)ã£",
					nickname + "ä¸åœ¨å‘¢~",
				}[rand.Intn(4)],
			))
		})
	// æˆ³ä¸€æˆ³
	engine.On("notice/notify/poke", zero.OnlyToMe).SetBlock(false).
		Handle(func(ctx *zero.Ctx) {
			var nickname = zero.BotConfig.NickName[0]
			switch {
			case poke.Load(ctx.Event.GroupID).AcquireN(3):
				// 5åˆ†é’Ÿå…±8å—å‘½ä»¤ç‰Œ ä¸€æ¬¡æ¶ˆè€—3å—å‘½ä»¤ç‰Œ
				time.Sleep(time.Second * 1)
				ctx.SendChain(message.Text("è¯·ä¸è¦æˆ³", nickname, " >_<"))
			case poke.Load(ctx.Event.GroupID).Acquire():
				// 5åˆ†é’Ÿå…±8å—å‘½ä»¤ç‰Œ ä¸€æ¬¡æ¶ˆè€—1å—å‘½ä»¤ç‰Œ
				time.Sleep(time.Second * 1)
				ctx.SendChain(message.Text("å–‚(#`Oâ€²) æˆ³", nickname, "å¹²å˜›ï¼"))
			default:
				// é¢‘ç¹è§¦å‘ï¼Œä¸å›žå¤
			}
		})
	// ç¾¤ç©ºè°ƒ
	var AirConditTemp = map[int64]int{}
	var AirConditSwitch = map[int64]bool{}
	engine.OnFullMatch("ç©ºè°ƒå¼€").SetBlock(true).
		Handle(func(ctx *zero.Ctx) {
			AirConditSwitch[ctx.Event.GroupID] = true
			ctx.SendChain(message.Text("â„ï¸å“”~"))
		})
	engine.OnFullMatch("ç©ºè°ƒå…³").SetBlock(true).
		Handle(func(ctx *zero.Ctx) {
			A
    
func init() { // æ’ä»¶ä¸»ä½“
	// è¢«å–Šåå­—
	engine.OnFullMatch("", zero.OnlyToMe).SetBlock(true).
		Handle(func(ctx *zero.Ctx) {
			var nickname = zero.BotConfig.NickName[0]
			time.Sleep(time.Second * 1)
			ctx.SendChain(message.Text(
				[]string{
					nickname + "åœ¨æ­¤ï¼Œæœ‰ä½•è´µå¹²~",
					"(ã£â—Ï‰â—)ã£åœ¨~",
					"è¿™é‡Œæ˜¯" + nickname + "(ã£â—Ï‰â—)ã£",
					nickname + "ä¸åœ¨å‘¢~",
				}[rand.Intn(4)],
			))
		})
	// æˆ³ä¸€æˆ³
	engine.On("notice/notify/poke", zero.OnlyToMe).SetBlock(false).
		Handle(func(ctx *zero.Ctx) {
			var nickname = zero.BotConfig.NickName[0]
			switch {
			case poke.Load(ctx.Event.GroupID).AcquireN(3):
				// 5åˆ†é’Ÿå…±8å—å‘½ä»¤ç‰Œ ä¸€æ¬¡æ¶ˆè€—3å—å‘½ä»¤ç‰Œ
				time.Sleep(time.Second * 1)
				ctx.SendChain(message.Text("è¯·ä¸è¦æˆ³", nickname, " >_<"))
			case poke.Load(ctx.Event.GroupID).Acquire():
				// 5åˆ†é’Ÿå…±8å—å‘½ä»¤ç‰Œ ä¸€æ¬¡æ¶ˆè€—1å—å‘½ä»¤ç‰Œ
				time.Sleep(time.Second * 1)
				ctx.SendChain(message.Text("å–‚(#`Oâ€²) æˆ³", nickname, "å¹²å˜›ï¼"))
			default:
				// é¢‘ç¹è§¦å‘ï¼Œä¸å›žå¤
			}
		})
	// ç¾¤ç©ºè°ƒ
	var AirConditTemp = map[int64]int{}
	var AirConditSwitch = map[int64]bool{}
	engine.OnFullMatch("ç©ºè°ƒå¼€").SetBlock(true).
		Handle(func(ctx *zero.Ctx) {
			AirConditSwitch[ctx.Event.GroupID] = true
			ctx.SendChain(message.Text("â„ï¸å“”~"))
		})
	engine.OnFullMatch("ç©ºè°ƒå…³").SetBlock(true).
		Handle(func(ctx *zero.Ctx) {
			AirConditSwitch[ctx.Event.GroupID] = false
			delete(AirConditTemp, ctx.Event.GroupID)
			ctx.SendChain(message.Text("ðŸ’¤å“”~"))
		})
	engine.OnRegex(`è®¾ç½®æ¸©åº¦(\d+)`).SetBlock(true).
		Handle(func(ctx *zero.Ctx) {
			if _, exist := AirConditTemp[ctx.Event.GroupID]; !exist {
				AirConditTemp[ctx.Event.GroupID] = 26
			}
			if AirConditSwitch[ctx.Event.GroupID] {
				temp := ctx.State["regex_matched"].([]string)[1]
				AirConditTemp[ctx.Event.GroupID], _ = strconv.Atoi(temp)
				ctx.SendChain(message.Text(
					"â„ï¸é£Žé€Ÿä¸­", "\n",
					"ç¾¤æ¸©åº¦ ", AirConditTemp[ctx.Event.GroupID], "â„ƒ",
				))
			} else {
				ctx.SendChain(message.Text(
					"ðŸ’¤", "\n",
					"ç¾¤æ¸©åº¦ ", AirConditTemp[ctx.Event.GroupID], "â„ƒ",
				))
			}
		})
	engine.OnFullMatch(`ç¾¤æ¸©åº¦`).SetBlock(true).
		Handle(func(ctx *zero.Ctx) {
			if _, exist := AirConditTemp[ctx.Event.GroupID]; !exist {
				AirConditTemp[ctx.Event.GroupID] = 26
			}
			if AirConditSwitch[ctx.Event.GroupID] {
				ctx.SendChain(message.Text(
					"â„ï¸é£Žé€Ÿä¸­", "\n",
					"ç¾¤æ¸©åº¦ ", AirConditTemp[ctx.Event.GroupID], "â„ƒ",
				))
			} else {
				ctx.SendChain(message.Text(
					"ðŸ’¤", "\n",
					"ç¾¤æ¸©åº¦ ", AirConditTemp[ctx.Event.GroupID], "â„ƒ",
				))
			}
		})
}