【发布时间】:2009-09-08 02:03:09
【问题描述】:
我正在使用 C# 开发一个简单的 irc 机器人,但我不知道如何将用于粗体/颜色等的典型 mirc 控制代码嵌入到字符串文字中。
有人可以指点我如何做到这一点吗?
【问题讨论】:
-
做什么?什么是 mIRC 颜色代码?你想做什么?
-
mirc 颜色代码只是插入字符串中的特殊字符,大多数 irc 客户端解析然后适当地进行颜色编码。
我正在使用 C# 开发一个简单的 irc 机器人,但我不知道如何将用于粗体/颜色等的典型 mirc 控制代码嵌入到字符串文字中。
有人可以指点我如何做到这一点吗?
【问题讨论】:
mIRC 颜色代码格式描述为here。我猜你在问如何在字符串中嵌入 ^C。
这被称为Caret notation。根据C0 and C1 control codes,^C 是:
'\x03'
嵌入到字符串中:
"blabla \x035,12to be colored text and background\x03 blabla"
【讨论】:
"♥5,12to be colored♥ ",编译器不应该对此感到窒息。
我创建一个枚举并将控制代码的十六进制值分配给它们。
enum ColorCode {
White = 0, /**< White */
Black = 1, /**< Black */
DarkBlue = 2, /**< Dark blue */
DarkGreen = 3, /**< Dark green */
Red = 4, /**< Red */
DarkRed = 5, /**< Dark red */
DarkViolet = 6, /**< Dark violet */
Orange = 7, /**< Orange */
Yellow = 8, /**< Yellow */
LightGreen = 9, /**< Light green */
Cyan = 10, /**< Cornflower blue */
LightCyan = 11, /**< Light blue */
Blue = 12, /**< Blue */
Violet = 13, /**< Violet */
DarkGray = 14, /**< Dark gray */
LightGray = 15 /**< Light gray */
};
enum ControlCode {
Bold = 0x02, /**< Bold */
Color = 0x03, /**< Color */
Italic = 0x09, /**< Italic */
StrikeThrough = 0x13, /**< Strike-Through */
Reset = 0x0f, /**< Reset */
Underline = 0x15, /**< Underline */
Underline2 = 0x1f, /**< Underline */
Reverse = 0x16 /**< Reverse */
};
【讨论】:
在我的 Python IRC 机器人中,我可以使用 \x02sometext\x02 大胆地显示在 irssi 中,显示如下:
this is \x02some text\x02
这是一些文字
至于颜色,我相信您正在寻找 \x03AA,BB ,其中 A 是前景色,B 是背景色(您在 Ctrl+K 后输入的内容)。不过,不是 100% 肯定的。尝试使用 telnet 连接 IRC 客户端,并检查使用 Ctrl+K 时 mIRC 的作用。
您不太可能在 IRC 客户端之间获得标准的内聚行为...ANSI 转义码由 irssi 等更多老式主要 Unix 客户端处理,而 mIRC 有时会做自己的事情。
【讨论】:
这可能取决于我使用的特定聊天库 (ChatSharp),但我无法让当前接受的答案正常工作。我最终得到的是:
channel.SendMessage((char)3 + "5,12hello");
【讨论】: