用于声明子命令的Sopel插件
项目描述
此IRC机器人Sopel的插件允许进行
安装
$ pip install sopel-subcmd
示例用法
将SubcommandDispatcher
类导入到您的插件中,为所需的子命令注册处理器,并使用与您的事件相关的bot, trigger
调用它。返回值指示是否找到了并调用了子命令处理器。请注意,处理器抛出的异常可以自由传播。
from sopel import plugin
from sopel_subcmd import SubcommandDispatcher
dispatcher = SubcommandDispatcher()
@dispatcher.register
def dummy_subcmd1(bot, trigger, *args, **kwargs):
bot.say(f"dummy:subcmd1 subcommand (args={args!r}, kwargs={kwargs!r})")
@dispatcher.register
def dummy_subcmd2(bot, trigger, *args, **kwargs):
bot.say(f"dummy:subcmd2 subcommand (args={args!r}, kwargs={kwargs!r})")
@plugin.commands(
"dummy",
"dummy:subcmd1",
"dummy:subcmd2",
"dummy:fakesub", # this pattern has no dedicated handler, we will use the base
)
def dummy(bot, trigger):
# We can do some computations common to every command before dispatch, if appropriate
data = 42
moredata = "Twas brillig and the slithy toves"
# automatically hand off to the subcommand handlers, if appropriate
if dispatcher.dispatch_subcmd(bot, trigger, data, moredata=moredata):
return
# we don't *have* to pass data to the handler if ``bot, trigger`` would be enough
# if _dispatch_subcmd(bot, trigger):
# return
bot.say(f"base command, invoked as {trigger.group(0)!r}")
上述示例插件产生以下行为
<SnoopJ> !dummy
<testibot> base command, invoked as '!dummy'
<SnoopJ> !dummy:subcmd1
<testibot> dummy:subcmd1 subcommand (args=(42,), kwargs={'moredata': 'Twas brillig and the slithy toves'})
<SnoopJ> !dummy:subcmd2
<testibot> dummy:subcmd2 subcommand (args=(42,), kwargs={'moredata': 'Twas brillig and the slithy toves'})
<SnoopJ> !dummy:fakesub
<testibot> base command, invoked as '!dummy:fakesub'
<SnoopJ> !version
<testibot> [version] Sopel v8.0.0.dev0 | Python: 3.7.16 | Commit: b5eba03ce74baae36e3456ac938686fb23f5671b
Unicode支持
由于Python对Unicode标识符有很好的支持,您可以将函数名称用非平凡脚本编写的函数进行分发
from sopel_subcmd import SubcommandDispatcher
dispatcher = SubcommandDispatcher()
@dispatcher.register
def dummy_猫(bot, trigger, *args, **kwargs):
bot.say("にゃあああー")
# ç = U+0063 U+0327
@dispatcher.register
def dummy_çava(bot, trigger, *args, **kwargs):
bot.say("ça va")
@dispatcher.register
def dummy_パイソン(bot, trigger, *args, **kwargs):
bot.say("\N{SNAKE}")
@plugin.commands(
"dummy",
"dummy:猫",
# NOTE:we need to repeat our command for Sopel to match different codepoint sequences,
# but dispatch will find the function whose name is equivalent under NFKC normalization (which Python uses)
"dummy:çava", # ç = U+00e7
"dummy:çava", # ç = U+0063 U+0327
"dummy:パイソン",
"dummy:パイソン",
)
def dummy(bot, trigger):
# We can do some computations common to every command before dispatch, if appropriate
data = 42
moredata = "Twas brillig and the slithy toves"
# automatically hand off to the subcommand handlers, if appropriate
if dispatcher.dispatch_subcmd(bot, trigger, data, moredata=moredata):
return
bot.say(f"base command, invoked as {trigger.group(0)!r}")
这使得该功能在用户界面方面更加透明
<SnoopJ> !dummy:猫
<testibot> にゃあああー
<SnoopJ> !dummy:çava
<testibot> ça va
<SnoopJ> !dummy:çava
<testibot> ça va
<SnoopJ> !dummy:パイソン
<testibot> 🐍
<SnoopJ> !dummy:パイソン
<testibot> 🐍
其他
如果需要,您可以使用Sopel的version
命令检查此插件的版本
<SnoopJ> !version sopel-subcmd
<testibot> [version] sopel-subcmd v1.0.0
已知问题
- 名称无效的子命令不进行规范化
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装软件包的更多信息。
源分布
sopel-subcmd-1.0.0.tar.gz (4.9 kB 查看哈希值)
构建分布
sopel_subcmd-1.0.0-py3-none-any.whl (5.0 kB 查看哈希)
关闭
sopel-subcmd-1.0.0.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 797c8fee88101c607d20de581d3bc099e14b3cf51b92db2c2e7e480c6db3ef50 |
|
MD5 | f2cd7b88c749cc1e7549ed050b178b36 |
|
BLAKE2b-256 | c91f621aa131537a4bb51dde2da2ed0e9f81ceb81dbe276d0a9d31824cef1c64 |
关闭
sopel_subcmd-1.0.0-py3-none-any.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8452eb9e48a800d7157039b2a22a74e9d7a7515a4b5da94266295358ef350583 |
|
MD5 | c1672cd97d2904298b00b4d0f9110696 |
|
BLAKE2b-256 | bef4c83c86530e12c29bc60d2a0e2865c52b53ad69e2db58450551b3ca6237de |