CTCP原始协议ACTION命令与c#

本文关键字:命令 ACTION 原始 协议 CTCP | 更新日期: 2023-09-27 18:11:25

我正在制作一个机器人连接到irc踢和咯咯笑,我正在使它响应不同的事情,但我希望它响应CTCP ACTION命令,这通常被用户称为/me用于角色扮演或显示动作。

根据这个关于CTCP的伟大网页http://www.irchelp.org/irchelp/rfc/ctcpspec.html?

格式为'001ACTION bars on the floor.'001

所以我设置我的bot以

回应
writer.WriteLine("PRIVMSG " + CHANNEL + " '001ACTION " + message + "'001");

我也在控制台中打印出这个结果,它的响应是"无文本可发送"

我不知道它应该告诉我什么,我假设转义字符是提前断行的,'0完全忽略了后面的01,所以我让bot在控制台中打印出它所读取的内容我输入/me舞蹈,然后在控制台中读取

PRIVMSG CHANNEL:(奇数符号)ACTION message(奇数符号)我不知道这些奇怪的符号是什么,但对我来说,它们看起来像笑脸.....在与一些人交谈后,我明白格式是正确的,但是'001对于不同的语言可能会有所不同

所以我查找'001对于c#可能意味着什么,我找到'x01和'0011,'0011不做任何事情,'x01也返回给我相同的响应...."无文本可发送"

我打印"PRIVMSG " + CHANNEL + "' x01ACTION " + message + "'x01"到我的控制台,我的'x01被替换为相同的笑脸字符,它显示当我输入/我跳舞,并让我的机器人打印出它读到控制台…

我的代码就是

 if (type == MessageType.ActionMessage)
            {
                writer.WriteLine("PRIVMSG " + CHANNEL + " 'x01ACTION " + message + "'x01");
                Console.WriteLine("PRIVMSG " + CHANNEL + " 'x01ACTION " + message + "'x01");
                writer.Flush();
            }

writer对象不是空的,把它写到我的控制台,这样我就可以看到发生了什么

最终的问题是,这是正确的,如果它不是什么是正确的方式来显示一个动作通过c#客户端到客户端协议CTCP

CTCP原始协议ACTION命令与c#

我终于想通了'x01是'001的正确转义字符,但'x01是十六进制的,转义字符是2字节soooo.....'x01AC是有效的转义字符....所以我要么让它'0001或有转义字符在它自己的字符串"'x01"+"ACTION ACTION strff 'x01",这样编译器,或w/e处理它,不会错误的A和C作为转义字符的一部分

在C转义字符是1个字节,所以'001或'x01不会导致A和C成为它的一部分....

PRIVMSG命令的语法:

PRIVMSG target :Here is your message

您可能只是忘记了作为消息开头分隔符的:,这将解释No text to send错误。

使用'u0001代替'x01以避免后续十六进制字母被视为转义序列的一部分。