C# 在我的IRC客户端中使用命令

C# 在我的IRC客户端中使用命令,c#,client,irc,C#,Client,Irc,我目前正在尝试制作一个简单的IRCGUI客户端。我使用SmartIrc4net作为基础,因为它似乎是所有产品中最具支持性的,可以在这里找到: 现在我遇到的问题是动作命令。例如,为了让自己成为一名歌剧演员,你需要打字 /操作管理员密码或更改主机的密码应为/sethost mynewhost 我的问题是,当我通过一个文本框传递该值时,而不是让我成为管理员或更改主机。我的输入在聊天中显示为文本 这是我的密码: string[] serverlist; serverlis

我目前正在尝试制作一个简单的IRCGUI客户端。我使用SmartIrc4net作为基础,因为它似乎是所有产品中最具支持性的,可以在这里找到:

现在我遇到的问题是动作命令。例如,为了让自己成为一名歌剧演员,你需要打字

/操作管理员密码或更改主机的密码应为/sethost mynewhost

我的问题是,当我通过一个文本框传递该值时,而不是让我成为管理员或更改主机。我的输入在聊天中显示为文本

这是我的密码:

        string[] serverlist;
        serverlist = new string[] { "mydomain.com" };
        int port = 6667;
        string channel = "#MyChannel#";
        try
        {
            irc.Connect(serverlist, port);
            irc.Login("SmartIRC", "SmartIrc4net Test Bot");
            irc.RfcJoin(channel);

                irc.SendMessage(SendType.Message, channel, "/oper admin mypass");
                irc.SendMessage(SendType.Action, channel, "/sethost mynewhost");

            irc.Listen();
但当我传递这些值时,它所做的只是显示我在聊天中键入的内容,而没有实际操作或更改我的设置主机

我是否真的可以让它将命令传递到IRC服务器,而不只是在聊天室中显示原始文本


任何帮助都将不胜感激,谢谢

这是因为您明确地发送了一条消息。IRC本身没有
/命令的概念,这都是在客户端完成的。您所做的只是发送一条带有特定文本的消息,该文本恰好以
/
开头。也就是说,服务器接收到的是

PRIVMSG #channel :/oper admin mypass
而不是

OPER admin mypass

您只需要找到一种向服务器发送原始IRC命令的方法。但是,您链接到的页面没有提供关于这一部分的很多文档。但是从层次上看,这应该在第2层或第1层。

比发送消息有更多的选项

您有用于Oper的示例irc.RfcOper(用户名,pasword)

如果您想为它不支持的动态示例sethost发送原始数据命令,您可以直接发送WriteLine

irc.WriteLine(“sethost mynewhost”)

打开IrcCommands.cs查看命令列表,打开Rfc2812.cs查看命令的传输方式


但是,我建议您阅读或至少浏览一下Rfc2812标准,您可以在这里找到该标准

研究IRC协议。IRC客户端不将/oper作为privmg发送到服务器,而是作为oper命令发送。您可以从运行wireshark开始,使用连接到某个服务器的IRC客户端,键入命令,并查看WS通过wire发送的确切内容。是的,我刚刚检查了wireshark,注意到使用PRIVMSG发送正常消息,OPER和SETHOST等命令前面没有PRIVMSG。现在,我如何让我的命令不在它前面有PPRIVMSG?谢谢你的回复,我刚刚检查了Rfc2812.cs和IrcCommands.cs,我已经看到了它的工作原理,但它并没有真正告诉我如何ddo它。你认为我应该在类中添加一个sethost函数,然后重新编译它吗?我已经准确地编写了你需要做的事情。检查两行代码。好的,我想我明白你的问题了,你使用SmartIrc4Net旧版本的方法它的主页在这里,如果你从代码项目中获取它,版本是0.2.0,最新版本是0.4.5.1通过下载新类库来运行它,我查看了oper命令的工作原理,我刚刚添加了对sethost的引用。现在可以工作了,谢谢。有没有什么特定类型的代码需要我输入使用,以便它可以将我的文本转换为原始数据?如果你从文本框中获取命令,那么你需要对它进行解析,以确定你是只想发送一条消息还是一条命令<在这种情况下,code>tbInput.Text.StartsWith(“/”
可能是一个很好的检查条件。然后你只需要弄清楚你到底需要发送什么,需要什么参数。嗨,是的,我试过了,但没有成功。但我现在明白你的意思了,当我运行Wireshark并看到命令上的PRIVMSG时,我发送了一条消息。要插入的原始数据不是来自文本框,而是在codebehind中指定的。你能给我一些提示吗,我需要做些什么来发送一条没有消息的消息,这样我就可以试着解决这个问题了。谢谢