From 82bdbff466f9f05860e6eda63ca5acc4b1a8cbc8 Mon Sep 17 00:00:00 2001 From: c0re100 Date: Sun, 30 Jan 2022 01:05:51 +0800 Subject: [PATCH] Command Parser --- client/extra.go | 52 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/client/extra.go b/client/extra.go index bccd2c8..3b6cd7e 100644 --- a/client/extra.go +++ b/client/extra.go @@ -3,6 +3,7 @@ package client import ( "fmt" "math/rand" + "strings" ) type ExtraGenerator func() string @@ -18,3 +19,54 @@ func UuidV4Generator() ExtraGenerator { return fmt.Sprintf("%08x-%04x-%04x-%04x-%012x", uuid[:4], uuid[4:6], uuid[6:8], uuid[8:10], uuid[10:]) } } + +func IsCommmand(text string) bool { + if text != "" { + if text[0] == '/' { + return true + } + } + return false +} + +func CheckCommand(text string, entities []*TextEntity) string { + if IsCommmand(text) { + // Check text entities and make bot happy! + if len(entities) >= 1 { + // Get first command + if entities[0].Type.TextEntityTypeType() == "textEntityTypeBotCommand" { + // e.g.: { "text": "/hello@world_bot", "textEntity": { offset: 0, length: 16 } } + // Result: "/hello" + if i := strings.Index(text[:entities[0].Length], "@"); i != -1 { + return text[:i] + } + return text[:entities[0].Length] + } + } else { + // Since userbot does not have bot command entities in Private Chat, so make userbot happy too! + // e.g.: ["/hello@world_bot", "/hello@", "/hello@123"] + // Result: "/hello" + if i := strings.Index(text, "@"); i != -1 { + return text[:i] + } + // e.g. ["/hello 123", "/hell o 123"] + // Result: "/hello", "/hell" + if i := strings.Index(text, " "); i != -1 { + return text[:i] + } + return text + } + } + return "" +} + +func CommandArgument(text string) string { + if IsCommmand(text) { + // e.g. ["/hello 123", "/hell o 123"] + // Result: "123", "o 123" + if i := strings.Index(text, " "); i != -1 { + return text[i+1:] + } + } + return "" +}