SmartIRC4Net won't connect/显示没有活动

本文关键字:显示 活动 connect won SmartIRC4Net | 更新日期: 2023-09-27 18:05:23

我正在用c#制作一个机器人,使用SmartIRC4Net库(http://www.meebey.net/projects/smartirc4net/)。如果你不熟悉这个库,请告诉我另一个。

我使用它是因为它是我能找到的最受支持的库。我阅读了"测试"示例bot,并试图通过删除查询和响应输入将其剥离到基本部分。

我对它进行了编程,试图连接到他们的网络频道,因为缺乏更好的测试频道,它似乎没有连接。当我调试机器人时,我的客户端上什么也没有显示(我现在在他们的频道上)。控制台也没有显示任何IRC错误消息或异常,只有我在最后设置的暂停。代码:

public static IrcClient irc = new IrcClient();
public static void Main(string[] args)
{
        //Setup
        irc.Encoding = System.Text.Encoding.UTF8;
        irc.SendDelay = 200;
        irc.ActiveChannelSyncing = true;
        //Event Handlers
        irc.OnError += new ErrorEventHandler(irc_OnError);
        irc.OnConnected += new EventHandler(irc_OnConnected);
        irc.OnRawMessage += new IrcEventHandler(irc_OnRawMessage);
        try
        {
            //Connect, log in, join channel
            irc.Connect("irc.freenode.org", 6667);
            irc.Login("HGPBot", "HGP Bot");
            irc.RfcJoin("#smartirc");
        }
        catch (Exception e)
        {
            Console.WriteLine("Could not connect, exception:" + Environment.NewLine
                + e.Message + Environment.NewLine
                + e.ToString());
        }
        //pause
        Console.WriteLine("Press any key to continue");
        Console.ReadKey(true);
        //Disconnect
        irc.Disconnect();
        //Exit
        Environment.Exit(0);
    }
    static void irc_OnRawMessage(object sender, IrcEventArgs e)
    {
        Console.WriteLine("irc_OnRawMessage initiated");
    }
    static void irc_OnConnected(object sender, EventArgs e)
    {
        Console.WriteLine("Connected");
        irc.SendMessage(SendType.Message, "#smartirc", "Connected");
    }
    static void irc_OnError(object sender, ErrorEventArgs e)
    {
        Console.WriteLine("IRC Error: " + e.ErrorMessage);
    }

[更新:根据@Russ c的建议添加了irc_OnConnected事件。该事件被触发并在控制台上记录"Connected"。然而,频道上什么也没发生。我将添加一个sendmessage行,看看会发生什么。

[Update2:增加SendMessage和OnRawMessage事件。]通道上没有出现输出,并且OnRawMessage事件下的文本没有写入控制台。(我是否使用正确的OnMessage事件?"OnMessage"事件不存在,测试机器人说OnMessage将"获取所有IRC消息"[/p>

SmartIRC4Net won't connect/显示没有活动

Ok;与所有基于事件的逻辑(请阅读此处的异步逻辑)一样,您需要订阅事件,以便库在有事情要做时通知您。因为您的测试代码没有订阅/附加到SmartIRC库中的任何事件,所以库只是坐在那里不做任何事情。

你和irc一起做了一部分。OnError行,但是您还需要添加这些方法:

irc.OnQueryMessage += new IrcEventHandler(OnQueryMessage);
irc.OnRawMessage += new IrcEventHandler(OnRawMessage);

然后是几个方法:

// this method we will use to analyse queries (also known as private messages)
public static void OnQueryMessage(object sender, IrcEventArgs e)
{
    switch (e.Data.MessageArray[0]) {
        case "hello":
           // this is where you decipher private messages posted to the bot.
           // if someone does "/privmsg HGPBot hello" this will reply "Hello!"
           irc.SendMessage(SendType.Message, "HGPBot, "Hello!");
           break;
        default:
           break;
    }
}
// this method will get all IRC messages
public static void OnRawMessage(object sender, IrcEventArgs e)
{
    System.Console.WriteLine("Received: "+e.Data.RawMessage);
}

如果你在这个系统上设置了一个断点。控制台线,您应该开始看到来自bot的东西。如果这似乎不起作用,您可以尝试在IRC服务器上创建自己的频道。

另外,不要忘记:用户可以连接到IRC没有在一个频道,如果你确定你的机器人正在使用的用户名,是唯一的,并且正在工作(即你可以通过mirc或其他方式登录到它自己)只是尝试发送一个/privmsg命令给你的机器人一旦程序出现连接。

还有,我刚刚注意到你的程序没有循环。您需要添加irc.Listen();在你的暂停语句之前。这将使irc bot进入侦听模式,并且是一个阻塞循环,因此在此时退出程序的唯一方法是结束任务,但至少它会显示它正在工作。

编辑2:让bot听:

// here we tell the IRC API to go into a receive mode, all events
// will be triggered by _this_ thread (main thread in this case)
// Listen() blocks by default, you can also use ListenOnce() if you
// need that does one IRC operation and then returns, so you need then 
// an own loop 
irc.Listen();
//pause
Console.WriteLine("Press any key to continue");
Console.ReadKey(true);