morny-book/sp/slash.md

7.4 KiB
Raw Blame History

/$slash Bot

这个功能可以让你...唔,就像 @RongSlashBot 一样,能够有一个*“响应诸如 /抱’、‘/摸摸’ 之类消息”*的功能。

基础用法

很简单,只需要像以下一样输入 斜杠**/** 加上 一个单词,就可以实现基础的 slash 响应。

/摸摸

这样子,bot 就会回应一句话以“描述你刚刚做了什么”。

> Morny Cono
> in reply to 安妮
安妮 摸摸自己 !

bot回应中,带有下划线的部分会带有一个指向某个人的链接。一个回应会永远包括两个第一个 用户永远是发送斜杠消息的你自己。而第二个人:如果你在发送消息的时候回复了某个人,那么第二个人就是 你回复的人;如果你没有回复任何人,那么第二个人将会是 自己 —— 字面值的“自己”(当然指向的链接也是你的用户链接)。

每个人的将会显示的名字只会是它们的 名字First Name,或者它们的 频道名

在 Telegram 新版,用户将可以在群组内使用频道身份发言;当然,也有群组可以链接频道,这时频道里的消息也会自动转发到群组内。不论是任何情况,有时候,发言者会是一个频道而非一个标准用户。Morny 实现了针对频道发送的消息,获取它的发送者名称发送者身份的链接的功能。这时,这个人显示的名字将会是它的频道的名字,而指向它的链接将会是指向它的频道的链接

然而,出于一些问题,指向频道的链接目前是损坏的。

指向一个用户的链接使用的是用户的 id 而非 username 因此,只要是用户没有注销账号的情况下,链接将会长期有效。这个链接也会产生 @ 提醒

这一部分以后应该会单独拿出来写个页面的,虽然,写出来会挺“内部实现”相关的,谁知道呢。

添加更多内容

也可以在后面再添加一个空格,通过以下的句式为动作和回应添加更多的内容

< in reply to qwq
/摸摸 

> Morny Cono
> in reply to 安妮
安妮 摸摸qwq  !

只要 bot 在句式中找到了第一个空格其后的内容都会被认为是 附加信息 ,而只有第一个空格的内容将会被认为是 动作。为了在 动作 部分添加空格,你可以使用单引号 '双引号 " 包围住动作部分,这可以使得 bot 忽略掉引号内部的空格的断句功能,让空格可以被包含动作 部分当中。

< in reply to 赤井 瑠璃❄️🏳️‍⚧️
/"greatly thanks" for caring me

> Morny Cono
> in reply to 安妮
安妮 greatly thanks赤井 瑠璃❄️🏳️‍⚧️ for caring me !

special: 特殊句式的忽略

为了规避一些很可能发生的意外触发因为斜杠 / 开头的句子还是会很常见很常见的bot 会忽略一些特定的句式。

目前bot 会忽略 动作 部分符合 Telegram 命令格式,或者看起来很像是一个文件路径的句子。

关于 Telegram 命令格式:

bot 判断一个命令是否是 telegram 命令,是通过判断这一部分是只有大小写字母,数字,以及下划线的格式,后面还可以有 @ 加上一个用户名,也可以没有这一部分。简单来说,这个格式就是 telegram 客户端会自动高亮出的命令格式。如果这一部分完全符合这个格式,那么 bot 就认为这是一个命令,进而不进行 slash 回应。

对于那些想要更多细节的人,这是 bot 内部用于判断 动作 部分是否符合 Telegram 命令格式的 RegEx 表达式:
^\w+(@\w+)?$

关于文件路径格式的判定:

bot 用了相当偷懒的方案。只要 bot 在 动作 部分检测出了一个或多个正斜杠 /(排除掉 slash 开头本身就要求的一个),就会认为这是一个文件路径,就会不进行 slash 回应。

强制执行 slash 回应

很多时候,即使满足了上述的特殊句式,但其实还是想要 slash bot 进行回应。Morny 设计了一个方式,使得 bot 能够完全忽略特殊句式的情况执行 slash 回应。这个方式甚至能规避想要发送的动作和 Morny 本身的命令产生冲突的情况,能使得两个功能都可以正常执行。

使用方式很简单:在最开始的斜杠 /动作 中间加一个 空格 就好了。

< in reply to qwq
/pia
> nothing will happens.

< in reply to qwq
/ pia

> Morny Cono
> in reply to 安妮
安妮 piaqwq

你知道吗

这个功能现在的版本,细节方面是模仿 @hasutestbot 的实现形式的。旧版还有着更好玩的各种特殊处理和更加 可能人性化/更智能 的设计,不过后来感觉,弄得太复杂反而太失败了就还是研究成功的前辈的做法好了,所以有了现在的版本。

虽然其实模仿 @hasutestbot 模仿的相当糟糕,它的很多特殊处理其实都没有抄到。

然而最后,@hasutestbot于服务器忘记续费了。