Embed mIRC Color codes into a C# literal?

旧巷老猫 提交于 2019-12-02 23:48:44

The mIRC color code format is described here. I guess you're asking how to embed a ^C in a string.

This is known as Caret notation. According to C0 and C1 control codes, ^C is:

'\x03'

Embedded in a string:

"blabla \x035,12to be colored text and background\x03 blabla"

I create an enum and assign the hex values for the control codes to them.

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 */
};

In my Python IRC bot, I can get bold to show up in irssi using \x02sometext\x02, which shows up like:

this is \x02some text\x02

this is some text

As for colors, I believe you're looking for \x03AA,BB where A is the foreground color and B the background color (what you'd type in after Ctrl+K). Not 100% for sure, though. Try connecting an IRC client using telnet, and check what mIRC does when you use Ctrl+K.

You're not likely to get a standard cohesive behavior across IRC clients...ANSI escape codes are processed by more of the old-fare staple Unix clients like irssi, and mIRC sometimes does its own thing.

This might be down to the specific chat library I was using (ChatSharp), but I couldn't get the current accepted answer to work. What I ended up with was:

channel.SendMessage((char)3 + "5,12hello");
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!