c#中的CTCP原始协议ACTION命令

时间:2013-04-28 11:25:02

标签: c# irc

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

根据这个关于ctcp的精彩网页 http://www.irchelp.org/irchelp/rfc/ctcpspec.html

格式是 \ 001ACTION barfs在地板上。\ 001

所以我设置我的机器人以

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

我也在我的控制台中打印出这个结果,所有它都响应 “没有要发送的文字”

我真的不知道这是什么意思告诉我,我假设转义字符在早期打破了线条\ 0完全忽略了它之后的另一个01,所以我在控制台中打印机器人什么呢读,我打字/我跳舞,我在控制台阅读

PRIVMSG CHANNEL :(奇数符号)ACTION消息(奇数符号) 我不知道奇怪的符号是什么,但对我来说,他们看起来像笑脸..... 在与几个人交谈之后,我知道格式是正确的,但\ 001可能因不同语言而有所不同

所以我查看了什么\ 001可能对c#和我的fin \ x01和\ 0011意味着什么,\ 0011没有做任何事情,\ x01也给我回复相同的响应......“没有文字发送“

我打印“PRIVMSG”+ CHANNEL +“\ x01ACTION”+消息+“\ x01” 在我的控制台上,我用\ x01替换为当我输入/我跳舞时显示的同一笑脸字符并让我的机器人打印出它读到控制台的内容...

我的代码就是

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

编写器对象不为null,并将其写入我的控制台是我可以看到会发生什么

最终的问题是,这是否正确,如果不是通过c#客户端向客户端协议CTCP显示操作的正确方法

2 个答案:

答案 0 :(得分:11)

我终于明白了 \ x01是\ 001的正确转义字符,但是\ x01是十六进制,转义字符是2个字节soooo ..... \ x01AC是一个有效的转义字符....所以我要么必须使它成为\ 0001或者有它的自带字符串“\ x01”+“ACTION action struff \ x01”中的转义字符,就像编译器或w / e处理它一样,不会将A和C误认为是转义字符的一部分

C转义字符中的

是1个字节,因此\ 001或\ x01不会导致A和C成为它的一部分....

答案 1 :(得分:1)

以下是PRIVMSG命令的语法:

PRIVMSG target :Here is your message

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