Chilli
10-07-2011, 18:28
Всем доброго времени суток!
Решил написать бота для jabber'а, для начала решил использовать библиотеку agsXMPP. После успешного подключения и т.п. решил сделать парочку команд, на которые бот что-либо выводил.
Тут и возникла проблема: при запуске бот считывает сообщения чата и, если находит там до его запуска засветились описанные в коде команды, он их принимает и выводит соответствующие им сообщения.
Можно ли поставить какую-нибудь задержку на выполнение команд, т.е. сделать так, чтобы выполнялись только те команды, которые были прописаны после запуска бота?
P.S. Не судите строго студента :3
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using agsXMPP;
using agsXMPP.protocol.x.muc;
using agsXMPP.protocol.client;
namespace sperm
{
class Program
{
static XmppClientConnection xmpp;
static Jid Room;
static void Main(string[] args)
{
xmpp = new XmppClientConnection();
xmpp.Server = "сервер";
xmpp.ConnectServer = "сервер";
xmpp.Username = "пользователь";
xmpp.Password = "пароль";
xmpp.Resource = "Home1";
xmpp.Priority = 0;
xmpp.Open();
xmpp.OnLogin += new ObjectHandler(OnLoginEvent);
xmpp.OnMessage += new MessageHandler(xmpp_OnMessage);
xmpp.OnError += new ErrorHandler(xmpp_OnError);
string ololo = Console.ReadLine();
while (true)
{
ololo = Console.ReadLine();
int delay=1000;
switch (ololo)
{
case "exit": return;
case "reconnect": xmpp.Close(); System.Threading.Thread.Sleep(delay); xmpp.Open(); continue;
}
xmpp.Send(new Message(Room, MessageType.groupchat, ololo));
}
}
static void xmpp_OnError(object sender, Exception ex)
{
Console.WriteLine(ex.Message);
}
static void xmpp_OnMessage(object sender, Message msg)
{
Console.WriteLine(msg.From + ": " + msg.Body);
switch (msg.Body)
{
case "!test": xmpp.Send(new Message(Room, MessageType.groupchat, "*\nI'm here!")); break;
case "няшка": xmpp.Send(new Message(Room, MessageType.groupchat, "*\nНяшка - мой_ник")); break;
case "ololo": xmpp.Send(new Message(Room, MessageType.groupchat, "*\nqwerty")); break;
}
}
static void OnLoginEvent(object sender)
{
Console.WriteLine("Присоединён.");
xmpp.SendMyPresence();
MucManager mucManager = new MucManager(xmpp);
Room = new Jid("JID");
mucManager.AcceptDefaultConfiguration(Room);
mucManager.JoinRoom(Room, "имя_пользователя");
}
}
}
Решил написать бота для jabber'а, для начала решил использовать библиотеку agsXMPP. После успешного подключения и т.п. решил сделать парочку команд, на которые бот что-либо выводил.
Тут и возникла проблема: при запуске бот считывает сообщения чата и, если находит там до его запуска засветились описанные в коде команды, он их принимает и выводит соответствующие им сообщения.
Можно ли поставить какую-нибудь задержку на выполнение команд, т.е. сделать так, чтобы выполнялись только те команды, которые были прописаны после запуска бота?
P.S. Не судите строго студента :3
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using agsXMPP;
using agsXMPP.protocol.x.muc;
using agsXMPP.protocol.client;
namespace sperm
{
class Program
{
static XmppClientConnection xmpp;
static Jid Room;
static void Main(string[] args)
{
xmpp = new XmppClientConnection();
xmpp.Server = "сервер";
xmpp.ConnectServer = "сервер";
xmpp.Username = "пользователь";
xmpp.Password = "пароль";
xmpp.Resource = "Home1";
xmpp.Priority = 0;
xmpp.Open();
xmpp.OnLogin += new ObjectHandler(OnLoginEvent);
xmpp.OnMessage += new MessageHandler(xmpp_OnMessage);
xmpp.OnError += new ErrorHandler(xmpp_OnError);
string ololo = Console.ReadLine();
while (true)
{
ololo = Console.ReadLine();
int delay=1000;
switch (ololo)
{
case "exit": return;
case "reconnect": xmpp.Close(); System.Threading.Thread.Sleep(delay); xmpp.Open(); continue;
}
xmpp.Send(new Message(Room, MessageType.groupchat, ololo));
}
}
static void xmpp_OnError(object sender, Exception ex)
{
Console.WriteLine(ex.Message);
}
static void xmpp_OnMessage(object sender, Message msg)
{
Console.WriteLine(msg.From + ": " + msg.Body);
switch (msg.Body)
{
case "!test": xmpp.Send(new Message(Room, MessageType.groupchat, "*\nI'm here!")); break;
case "няшка": xmpp.Send(new Message(Room, MessageType.groupchat, "*\nНяшка - мой_ник")); break;
case "ololo": xmpp.Send(new Message(Room, MessageType.groupchat, "*\nqwerty")); break;
}
}
static void OnLoginEvent(object sender)
{
Console.WriteLine("Присоединён.");
xmpp.SendMyPresence();
MucManager mucManager = new MucManager(xmpp);
Room = new Jid("JID");
mucManager.AcceptDefaultConfiguration(Room);
mucManager.JoinRoom(Room, "имя_пользователя");
}
}
}