Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - [решено] C# и XMPP-бот.

Ответить
Настройки темы
.NET - [решено] C# и XMPP-бот.

Аватара для Chilli

Новый участник


Сообщения: 28
Благодарности: 2


Конфигурация

Профиль | Отправить PM | Цитировать


Всем доброго времени суток!
Решил написать бота для 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

 

Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


Chilli, посмотрите, если формат ввода данных поддерживает время отправки сообщений, то ориентироваться по времени. C# используя .NET должен содержать команды для упрощенной работы со временем (я так думаю, что должен :) )

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 20:46, 10-07-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Chilli

Новый участник


Сообщения: 28
Благодарности: 2

Профиль | Отправить PM | Цитировать


По идее, то, что я ищу, находится в самой библиотеке XMPP.
Есть там agsXMPP.protocol.x.Delay, и вот это очень похоже на искомое. На C# сижу второй день, потому испытываю некоторые сложности в освоении.

Отправлено: 21:21, 10-07-2011 | #3


Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


Chilli, я не разбирался с протоколом XMMP, я не кодировал на С# и часа. Все мои предположения исходят из того, что я вижу и предполагаю.
Chilli, http://www.ag-software.de/agsxmpp-sdk/download/ я так понимаю, что эта библиотека используется в разработке.
Скачав архив 7z я обнаружил, что есть такие папки как doc, samples и т.д. Есть примеры рабочих программ. Поэтому вопрос банален: документация читалась?
Ознакомьтесь с полным описанием протокола, прочитав спецификацию XMPP. (EN)

Студент 3 его курса, не изобретай велосипед! Твоя задача - освоить механизм, поняв принципы его работы.
Поэтому сначала читаешь документацию, потом рисуешь схему транспорта сообщений передатчик-среда-приемник. Смотришь кто, что и как формирует, как отправляет и как принимает. Берешь рабочий пример, разбираешься в нем (я сейчас в код не полезу, но он у меня есть) и только после(!) этого начинаешь придумывать что-то свое.
Думай над более интересными задачами - присоединение этого механизма к "старшей" задаче, объединение ряда программ в комплекс, оценку гибкости данного решения и т.п. Это в будущем. А сейчас Твоя задача - освоить механизм, поняв принципы его работы.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:17, 10-07-2011 | #4


Аватара для Chilli

Новый участник


Сообщения: 28
Благодарности: 2

Профиль | Отправить PM | Цитировать


lxa85, тут я зафэйлился, ибо качал только библиотеку по ссылке справа, я слепой =/
Проблема решилась довольно таки банально, перед свитчем с командами прописал
Код: Выделить весь код
if (msg.XDelay != null) return;
Ну а так, естественно, делал по сэмплам, из своего будет только функционал бота
Спасибо за упоминание о документации, что вложена в SDK, помогла в дальнейших реализациях.

Отправлено: 18:36, 11-07-2011 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - [решено] C# и XMPP-бот.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Установка 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




 
Переход