6

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

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

格式为 \001ACTION barfs on the floor。\001

所以我设置了我的机器人来回应

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

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

这真的不知道这应该告诉我什么,我假设转义字符很早就断线了, \0 完全忽略了后面的其他 01,所以我让机器人在控制台中打印出它读到的内容,我输入 /me dances 我在控制台中阅读

PRIVMSG 频道:(奇数符号)动作消息(奇数符号)我不知道奇数符号是什么,但对我来说它们看起来像笑脸.....与几个人交谈后,我知道格式是正确的,但是\001 对于不同的语言可能会有所不同

所以我查找了 \001 对 c# 的含义,我发现 \x01 和 \0011 和 \0011 没有做任何事情, \x01 也返回了相同的响应......“没有要发送的文本”

我在控制台上打印“PRIVMSG” + CHANNEL + “\x01ACTION” + 消息 + “\x01”,然后 \x01 被替换为当我输入 /me dances 并让我的机器人打印时显示的相同笑脸字符把它读到控制台的内容...

我的代码很简单

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

writer 对象不为空,将其写入我的控制台是这样我可以看到会发生什么

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

4

2 回答 2

12

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

在 C 中,转义字符为 1 个字节,因此 \001 或 \x01 不会导致 A 和 C 成为其中的一部分......

于 2013-05-01T01:40:09.567 回答
2

以下是该PRIVMSG命令的语法:

PRIVMSG target :Here is your message

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

于 2013-04-29T07:01:48.363 回答