我正在制作一个机器人以连接到irc进行踢打和咯咯笑,并且我正在使其响应不同的事物,但是我希望它使用CTCP ACTION命令进行响应,用户通常将其称为/me来充当角色播放或显示 Action 。
根据这个关于ctcp的好网页
http://www.irchelp.org/irchelp/rfc/ctcpspec.html?
格式是
\001地板上的 Action 倒钩。\001
所以我设置了我的机器人来回应
writer.WriteLine("PRIVMSG " + CHANNEL + " \001ACTION " + message + "\001");
我也在控制台中打印出此结果,它所响应的是
“没有短信可发送”
这真的不知道该告诉我什么,我认为转义字符早就被换行了,\0完全忽略了它后面的其他01,所以我让机器人在控制台中打印出了它所读取的内容,我键入/我跳舞,然后我在控制台中阅读
PRIVMSG CHANNEL :(奇数符号) Action 消息(奇数符号)
我不知道什么是奇数符号,但对我来说,它们看起来像是笑脸.....
与一些人交谈后,我了解格式是正确的,但是\001对于不同的语言可能有所不同
因此,我查找\001对C#的含义,然后查找\x01和\0011,而\0011没有执行任何操作,并且\x01也返回了相同的响应...。“无文本可发送”
我打印“PRIVMSG” + CHANNEL +“\x01ACTION” +消息+“\x01”
到我的控制台,然后我将\x01替换为当我键入/me dance并让我的机器人打印出它在控制台上读取的内容时显示的相同笑脸字符...
我的代码很简单
if (type == MessageType.ActionMessage)
{
writer.WriteLine("PRIVMSG " + CHANNEL + " \x01ACTION " + message + "\x01");
Console.WriteLine("PRIVMSG " + CHANNEL + " \x01ACTION " + message + "\x01");
writer.Flush();
}
writer对象不为null,并将其写入控制台,这样我就可以看到发生了什么
最终的问题是,这是正确的吗?如果不是,那么通过C#客户端到客户端协议(protocol)CTCP显示操作的正确方法是什么?
最佳答案
我终于想通了
\x01是\001的正确转义字符,但是\x01是十六进制的,转义字符是2个字节,所以.....\x01AC是有效的转义字符....所以我不得不将其设置为\0001或自己的字符串“\x01” +“ACTION action struff\x01”中的转义字符使编译器(或带/会处理它)不会将A和C误认为是转义字符的一部分
C中的转义字符为1个字节,因此\001或\x01不会导致A和C成为其中的一部分...。
关于c# - 在C#中使用CTCP原始协议(protocol)ACTION命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16262349/