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