|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - [решено] C# и XMPP-бот. |
|
.NET - [решено] C# и XMPP-бот.
|
![]() Новый участник Сообщения: 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, "имя_пользователя"); } } } |
|
Отправлено: 18:28, 10-07-2011 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать Chilli, посмотрите, если формат ввода данных поддерживает время отправки сообщений, то ориентироваться по времени. C# используя .NET должен содержать команды для упрощенной работы со временем (я так думаю, что должен :) )
|
------- Отправлено: 20:46, 10-07-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() Новый участник Сообщения: 28
|
Профиль | Отправить PM | Цитировать По идее, то, что я ищу, находится в самой библиотеке XMPP.
Есть там agsXMPP.protocol.x.Delay, и вот это очень похоже на искомое. На C# сижу второй день, потому испытываю некоторые сложности в освоении. |
Отправлено: 21:21, 10-07-2011 | #3 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать Chilli, я не разбирался с протоколом XMMP, я не кодировал на С# и часа. Все мои предположения исходят из того, что я вижу и предполагаю.
Chilli, http://www.ag-software.de/agsxmpp-sdk/download/ я так понимаю, что эта библиотека используется в разработке. Скачав архив 7z я обнаружил, что есть такие папки как doc, samples и т.д. Есть примеры рабочих программ. Поэтому вопрос банален: документация читалась? Ознакомьтесь с полным описанием протокола, прочитав спецификацию XMPP. (EN) Студент 3 его курса, не изобретай велосипед! Твоя задача - освоить механизм, поняв принципы его работы. Поэтому сначала читаешь документацию, потом рисуешь схему транспорта сообщений передатчик-среда-приемник. Смотришь кто, что и как формирует, как отправляет и как принимает. Берешь рабочий пример, разбираешься в нем (я сейчас в код не полезу, но он у меня есть) и только после(!) этого начинаешь придумывать что-то свое. Думай над более интересными задачами - присоединение этого механизма к "старшей" задаче, объединение ряда программ в комплекс, оценку гибкости данного решения и т.п. Это в будущем. А сейчас Твоя задача - освоить механизм, поняв принципы его работы. |
------- Отправлено: 22:17, 10-07-2011 | #4 |
![]() Новый участник Сообщения: 28
|
Профиль | Отправить PM | Цитировать lxa85, тут я зафэйлился, ибо качал только библиотеку по ссылке справа, я слепой =/
Проблема решилась довольно таки банально, перед свитчем с командами прописал Ну а так, естественно, делал по сэмплам, из своего будет только функционал бота ![]() Спасибо за упоминание о документации, что вложена в SDK, помогла в дальнейших реализациях. |
|
Отправлено: 18:36, 11-07-2011 | #5 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Установка xmpp-клиента Spark, Debian | cynical2207 | Программное обеспечение Linux и FreeBSD | 1 | 02-04-2011 15:58 | |
.NET - Нужна библиотека для протокола XMPP(Jabber) | DaRiYs | Программирование и базы данных | 2 | 10-08-2010 03:50 | |
Вирус в DSL модеме или модем как DDoS бот ? | Dump | Лечение систем от вредоносных программ | 3 | 11-12-2009 06:45 | |
IRC бот для анекдотов. | SkyMAN91 | Программное обеспечение Windows | 0 | 09-11-2007 00:03 | |
Бот на форуме? | Millenium | Вебмастеру | 7 | 13-02-2005 19:29 |
|