diff --git a/README.md b/README.md index 65b64a2f..21be122b 100644 --- a/README.md +++ b/README.md @@ -413,6 +413,14 @@ print("run[CQ:image,file="+j["img"]+"]") - [x] 藏尾诗[xxx] + +
+ 英文字符翻转 + + `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/char_reverser"` + + - [x] 翻转 [英文字符串] +
选择困难症帮手 diff --git a/main.go b/main.go index 343e109b..645bef24 100644 --- a/main.go +++ b/main.go @@ -62,6 +62,7 @@ import ( _ "github.com/FloatTech/ZeroBot-Plugin/plugin/bilibili" // b站相关 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/book_review" // 哀伤雪刃吧推书记录 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/cangtoushi" // 藏头诗 + _ "github.com/FloatTech/ZeroBot-Plugin/plugin/char_reverser" // 英文字符翻转 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/choose" // 选择困难症帮手 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/chouxianghua" // 说抽象话 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/coser" // 三次元小姐姐 diff --git a/plugin/char_reverser/init.go b/plugin/char_reverser/init.go new file mode 100644 index 00000000..1a208c15 --- /dev/null +++ b/plugin/char_reverser/init.go @@ -0,0 +1,111 @@ +// Package charreverser 英文字符反转 +package charreverser + +import ( + "regexp" + "strings" + + ctrl "github.com/FloatTech/zbpctrl" + "github.com/FloatTech/zbputils/control" + zero "github.com/wdvxdr1123/ZeroBot" + "github.com/wdvxdr1123/ZeroBot/message" +) + +const commandRegex = `[A-z]{1}([A-z]|\s)+[A-z]{1}` // 命令正则表达式 + +var ( + charMap = map[rune]rune{ + 'a': 'ɐ', + 'b': 'q', + 'c': 'ɔ', + 'd': 'p', + 'e': 'ǝ', + 'f': 'ɟ', + 'g': 'ƃ', + 'h': 'ɥ', + 'i': 'ᴉ', + 'j': 'ɾ', + 'k': 'ʞ', + 'l': 'l', + 'm': 'ɯ', + 'n': 'u', + 'o': 'o', + 'p': 'd', + 'q': 'b', + 'r': 'ɹ', + 's': 's', + 't': 'ʇ', + 'u': 'n', + 'v': 'ʌ', + 'w': 'ʍ', + 'x': 'x', + 'y': 'ʎ', + 'z': 'z', + 'A': '∀', + 'B': 'ᗺ', + 'C': 'Ɔ', + 'D': 'ᗡ', + 'E': 'Ǝ', + 'F': 'Ⅎ', + 'G': '⅁', + 'H': 'H', + 'I': 'I', + 'J': 'ſ', + 'K': 'ʞ', + 'L': '˥', + 'M': 'W', + 'N': 'N', + 'O': 'O', + 'P': 'Ԁ', + 'Q': 'Ò', + 'R': 'ᴚ', + 'S': 'S', + 'T': '⏊', + 'U': '∩', + 'V': 'Λ', + 'W': 'M', + 'X': 'X', + 'Y': '⅄', + 'Z': 'Z', + } + + compiledRegex = regexp.MustCompile(commandRegex) +) + +func init() { + // 初始化engine + engine := control.Register( + "charreverser", + &ctrl.Options[*zero.Ctx]{ + DisableOnDefault: false, + Help: "字符翻转\n -翻转 <英文字符串>", + }, + ) + // 处理字符翻转指令 + engine.OnRegex(`翻转( )+[A-z]{1}([A-z]|\s)+[A-z]{1}`).SetBlock(true).Handle( + func(ctx *zero.Ctx) { + // 获取需要翻转的字符串 + results := compiledRegex.FindAllString(ctx.MessageString(), -1) + str := results[0] + + // 将字符顺序翻转 + var tempBuilder strings.Builder + for i := len(str) - 1; i >= 0; i-- { + tempBuilder.WriteByte(str[i]) + } + + // 翻转字符字形 + var reversedStrBuilder strings.Builder + for _, char := range tempBuilder.String() { + if char != ' ' { + reversedStrBuilder.WriteRune(charMap[char]) + } else { + reversedStrBuilder.WriteRune(' ') + } + } + + // 发送翻转后的字符串 + ctx.SendChain(message.Text(reversedStrBuilder.String())) + }, + ) +}