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

Posted

技术标签:

【中文标题】在我的 IRC 客户端中使用命令【英文标题】:Using Commands in my IRC Client 【发布时间】:2012-05-09 12:17:24 【问题描述】:

我目前正在尝试制作一个简单的 IRC Gui 客户端。我使用 SmartIrc4net 作为基础,因为它似乎是所有这些中最支持的,在这里找到:http://www.codeproject.com/Articles/8323/SmartIrc4net-the-C-IRC-library

现在我遇到的问题是操作命令。例如,要让自己成为一名操作员,您可以输入

/oper 管理员密码或更改主机,将是 /sethost mynewhost

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

这是我的代码:

        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();

但是当我传递这些值时,它所做的只是显示我在聊天中输入的内容,而不会真正让我操作或更改我的 sethost。

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

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

【问题讨论】:

研究 IRC 协议。 IRC 客户端不会将 /oper 作为 PRIVMSG 发送到服务器,而是作为 OPER 命令发送。您可以从运行 wireshark 开始,使用连接到某个服务器的 IRC 客户端,输入命令,然后查看 WS 究竟是通过电线发送的内容。 是的,我刚刚检查了 Wireshark,发现使用 PRIVMSG 发送正常消息,而 OPER 和 SETHOST 等命令前面没有 PRIVMSG。现在我如何让我的命令没有 PPRIVMSG Infront 呢?感谢您的回复 【参考方案1】:

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

PRIVMSG #channel :/oper admin mypass

而不是

OPER admin mypass

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

【讨论】:

那么有没有我需要输入的特定类型的代码才能将我的文本转换为原始数据? 如果您从文本框中获取命令,那么您需要对其进行解析以确定您是否只想发送消息或命令。 tbInput.Text.StartsWith("/") 在这种情况下可能是检查的好条件。然后你只需要弄清楚你到底需要发送什么以及使用什么参数。 嗨,是的,我试过了,但没有成功。但是,是的,我现在明白你的意思了,当我运行 Wireshark 并在发送消息时看到命令上的 PRIVMSG 时。将要插入的原始数据不是来自文本框,而是在代码隐藏中指定。你能给我一些关于在没有 PRIVMSG 的情况下发送消息需要做什么的提示吗,所以我可以尝试解决这个问题。非常感谢【参考方案2】:

除了 SendMessages 之外,还有很多选项。

您有 Oper 的示例 irc.RfcOper(username, pasword)。

如果你想为它不支持的东西发送原始数据命令,你可以直接发送一个 WriteLine。

irc.WriteLine("sethost mynewhost")

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

不过,我建议您阅读或至少了解一下您可以在此处找到的 Rfc2812 标准 https://www.rfc-editor.org/rfc/rfc2812

【讨论】:

嗨,我刚刚检查了 Rfc2812.cs 和 IrcCommands.cs,我已经看到它是如何工作的,但它并没有真正告诉我如何去做。你认为我应该在类中添加一个 sethost 函数,然后重新编译它吗? 我已经准确地写了你需要做的事情。检查两个代码行。 好的,我想我明白了你的问题,你使用的旧版本 SmartIrc4Net 的主页在这里meebey.net/projects/smartirc4net 如果你从代码项目中获取它,版本是 0.2.0,最新的是0.4.5.1 通过下载新的类库让它工作了,我查看了 oper 命令是如何工作的,我只是添加了对 sethost 的引用。现在可以了,谢谢

以上是关于在我的 IRC 客户端中使用命令的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式发送 IRC 命令

C#中的IRC库[关闭]

IRC 协议的 JOIN 命令

尝试IRC & freenode

python irc客户端没有识别响应

基于 .NET 的 IRC 服务器