#command #bot #parser

command-parser

解析聊天机器人的命令

3 个版本 (稳定)

1.0.1 2024 年 6 月 26 日
0.0.1 2024 年 6 月 25 日

1725Web 编程

MIT 许可证

18KB
278

command-parser

一个简单的库,可以用来解析像 Twitch 上的聊天机器人那样的命令。

命令语法

在此文档中的任何示例中,! 将用作前缀,- 将用作选项前缀。

这个库可以解析的命令可能看起来像这样

!foo arg1"long arg 2" -opt-opt-key1:val1-key2:"long val2"

一个命令由 4 个不同的部分组成

  • name: 命令的名称是前缀之后的第一词。在上面的例子中是 foo
  • arguments: 参数是传递给命令的简单字符串。它们是单个单词或用 " 包围的空格字符串。在例子中,两个参数是 arg1long arg 2
  • options: 选项是一组单词。它们以前缀 option_prefix 开头。例子中只有一个选项 opt
  • parameters: 参数是键值对。它们以前缀 option_prefix 开头,并用 : 分隔。键值对中的值可以是单词或用 " 包围的字符串。在上面的例子中,key1 的值是 val1,而 key2 的值是 long val2

转义

由于 " 用于标记长参数和值的边界,因此通常无法将它们包含在参数字符串中。

您可以使用以下方法转义长参数或值

  • \": 产生 "
  • \\: 产生 \

示例

use std::collections::{HashMap, HashSet};
use command_parser::{Parser, Command};

let p = Parser::new('!', '-');
let command_string = r##"!foo arg1 "long arg 2" -opt -opt -key1:val1 -key2:"long val2""##;
let command = p.parse(command_string).unwrap();

assert_eq!(command.name, "foo");
assert_eq!(command.arguments[1], "long arg 2");
assert!(command.options.contains("opt"));
assert_eq!(command.parameters.get("key2"), Some(&"long val2".to_string()));

依赖项

~275–730KB
~17K SLoC