internal async void Execute(IJabbRClient client, Room room)
    {
      Guard.NullParameter(client, () => client);
      Guard.NullParameter(room, () => room);

      if (!IsHandled)
      {
        return;
      }

      foreach (var response in Responses)
      {
        switch (response.ResponseType)
        {
          case MessageHandlerResultResponseType.DefaultMessage:
            await client.Send(response.ResponseText, room.Name);
            break;

          case MessageHandlerResultResponseType.ActionMessage:
            await client.Send("/me " + response.ResponseText, room.Name);
            break;

          case MessageHandlerResultResponseType.Kick:
            await client.Kick(response.ResponseText, room.Name);
            break;
        }
      }
    }
		public void ProcessMessage(Message message, IPluginContext context, IJabbRClient client)
		{
			Guard.NullParameter(message, () => message);
			Guard.NullParameter(context, () => context);
			Guard.NullParameter(client, () => client);

			foreach (var messageHandler in _messageHandlers)
			{
				Log.Trace("Applying handler: {0}", messageHandler.Name);

				try
				{
					var result = messageHandler.Execute(message, context);
					result.Execute(client, context.Room);

					var continueProcessing = !result.IsHandled || messageHandler.ContinueProcessing;
					if (!continueProcessing)
					{
						Log.Trace("Terminating message processing after: {0}.", messageHandler.Name);
						break;
					}
				}
				catch (Exception ex)
				{
					Log.ErrorException("Error applying handler: " + messageHandler.Name, ex);
				}
			}
		}
    public async Task Start()
    {
      Log.Info("Starting BawBag");
      Log.Info("Connecting to '{0}' as '{1}'.", _configuration.JabbrUrl, _configuration.JabbrNick);

      _store.Initialize();
      IndexCreation.CreateIndexes(Assembly.GetExecutingAssembly(), _store);

      _pluginManager = new PluginManager();
      _pluginManager.Initialize(_configuration.PluginsDirectory, _store);

      ServicePointManager.DefaultConnectionLimit = 10;

      _client = new JabbRClient(_configuration.JabbrUrl) { AutoReconnect = true };

      _client.MessageReceived += MessageReceived;
      _client.MeMessageReceived += MeMessageReceived;
      _client.UserJoined += UserJoined;
      _client.UserLeft += UserLeft;

      Log.Info("Starting BawBag: Connecting");
      JabbR.Client.Models.LogOnInfo logOnInfo;
      try
      {
        logOnInfo = await _client.Connect(_configuration.JabbrNick, _configuration.JabbrPassword);
      }
      catch (Exception ex)
      {
        Log.Fatal("Failed to connect", ex);
        throw;
      }

      Log.Info("Starting BawBag: Connected");
      foreach (var roomName in logOnInfo.Rooms.Select(r => r.Name))
      {
        var jabbrRoom = await _client.GetRoomInfo(roomName);
        var room = Room.Create(jabbrRoom);
        _rooms[room.Name] = room;
      }

      Log.Info("Started BawBag");

      foreach (var roomName in _configuration.Rooms)
      {
        if (_rooms.ContainsKey(roomName))
        {
          continue;
        }

        await _client.JoinRoom(roomName);
        var jabbrRoom = await _client.GetRoomInfo(roomName);
        var room = Room.Create(jabbrRoom);
        _rooms[room.Name] = room;
      }
    }
示例#4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="JabbRContext"/> class.
        /// </summary>
        /// <param name="jabbrClient">The jabbr client.</param>
        /// <param name="eventAggregator">The event aggregator.</param>
        /// <exception cref="System.ArgumentNullException">
        /// jabbrClient
        /// or
        /// eventAggregator
        /// </exception>
        public JabbRContext(IJabbRClient jabbrClient,
                            IEventAggregator eventAggregator,
                            IDependencyResolver dependencyResolver)
        {
            if (jabbrClient == null)
            {
                throw new ArgumentNullException("jabbrClient");
            }
            if (eventAggregator == null)
            {
                throw new ArgumentNullException("eventAggregator");
            }
            if (dependencyResolver == null)
            {
                throw new ArgumentNullException("dependencyResolver");
            }

            this.jabbrClient        = jabbrClient;
            this.eventAggregator    = eventAggregator;
            this.dependencyResolver = dependencyResolver;
        }
示例#5
0
        private static async void RunClientAsync(string server, string roomName, string userName, string password, IJabbRClient client, ManualResetEventSlim wh)
        {
            LogOnInfo info = null;

            try
            {
                await EnsureAccount(server, userName, password);

                // Connect to chat
                info = await client.Connect(userName, password);

                Console.WriteLine("Logged on successfully. You are currently in the following rooms:");
                foreach (var room in info.Rooms)
                {
                    Console.WriteLine(room.Name);
                    Console.WriteLine(room.Private);
                }

                Console.WriteLine("User id is {0}. Don't share this!", info.UserId);

                Console.WriteLine();

                // Get my user info
                User myInfo = await client.GetUserInfo();

                Console.WriteLine(myInfo.Name);
                Console.WriteLine(myInfo.LastActivity);
                Console.WriteLine(myInfo.Status);
                Console.WriteLine(myInfo.Country);

                // Join a room called test
                await client.JoinRoom(roomName);

                // Send a client side message
                var message = new ClientMessage
                {
                    Id = Guid.NewGuid().ToString(),
                    Content = "Hey",
                    Room = roomName
                };

                // Send the message to the server and wait for the ack
                await client.Send(message, TimeSpan.FromSeconds(2));

                // Get info about the test room
                Room roomInfo = await client.GetRoomInfo(roomName);

                Console.WriteLine("Users");

                foreach (var u in roomInfo.Users)
                {
                    Console.WriteLine(u.Name);
                }

                Console.WriteLine();

                foreach (var u in roomInfo.Users)
                {
                    if (u.Name != userName)
                    {
                        await client.SendPrivateMessage(u.Name, "hey there, this is private right?");
                    }
                }

                // Set the flag
                await client.SetFlag("bb");

                // Set the user note
                await client.SetNote("This is testing a note");

                // Mark the client as typing
                await client.SetTyping(roomName);

                // Clear the note
                await client.SetNote(null);

                // Say hello to the room
                await client.Send("Hello world", roomName);

                if (roomInfo.Owners.Contains(userName))
                {
                    // Post a notification (You must be room owner)
                    //await client.PostNotification(new ClientNotification
                    //{
                    //    Source = "Github",
                    //    Content = "This is a fake github notification from the client",
                    //    ImageUrl = "data:image/png;base64,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",
                    //    Room = "test"
                    //});
                }

                Console.WriteLine("Press any key to leave the room and disconnect");

                Console.Read();

                await client.LeaveRoom(roomName);

                client.Disconnect();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: " + ex.GetBaseException().Message);
            }
            finally
            {
                wh.Set();
            }
        }
示例#6
0
文件: Robot.cs 项目: xt0rted/JibbR
        public void SetupClient(Uri host)
        {
            if (_isSetup)
            {
                Console.Error.WriteLine("Client is already setup.");
                return;
            }

            _isSetup = true;

            _client = new JabbRClient(host);

            _client.MessageReceived += ClientOnMessageReceived;
            _client.PrivateMessage += ClientOnPrivateMessage;
            _client.UserJoined += ClientOnUserJoined;
            _client.UserLeft += ClientOnUserLeft;

            _eventBus.Pull<JabbrMessage>()
                     .Subscribe(DoSendMessage);

            _adapterManager.SetupAdapters(this);
        }
示例#7
0
        private static async void RunClientAsync(string server, string roomName, string userName, string password, IJabbRClient client, ManualResetEventSlim wh)
        {
            LogOnInfo info = null;

            try
            {
                await EnsureAccount(server, userName, password);

                // Connect to chat
                info = await client.Connect(userName, password);

                Console.WriteLine("Logged on successfully. You are currently in the following rooms:");
                foreach (var room in info.Rooms)
                {
                    Console.WriteLine(room.Name);
                    Console.WriteLine(room.Private);
                }

                Console.WriteLine("User id is {0}. Don't share this!", info.UserId);

                Console.WriteLine();

                // Get my user info
                User myInfo = await client.GetUserInfo();

                Console.WriteLine(myInfo.Name);
                Console.WriteLine(myInfo.LastActivity);
                Console.WriteLine(myInfo.Status);
                Console.WriteLine(myInfo.Country);

                // Join a room called test
                await client.JoinRoom(roomName);

                // Send a client side message
                var message = new ClientMessage
                {
                    Id      = Guid.NewGuid().ToString(),
                    Content = "Hey",
                    Room    = roomName
                };

                // Send the message to the server and wait for the ack
                await client.Send(message, TimeSpan.FromSeconds(2));

                // Get info about the test room
                Room roomInfo = await client.GetRoomInfo(roomName);

                Console.WriteLine("Users");

                foreach (var u in roomInfo.Users)
                {
                    Console.WriteLine(u.Name);
                }

                Console.WriteLine();

                foreach (var u in roomInfo.Users)
                {
                    if (u.Name != userName)
                    {
                        await client.SendPrivateMessage(u.Name, "hey there, this is private right?");
                    }
                }

                // Set the flag
                await client.SetFlag("bb");

                // Set the user note
                await client.SetNote("This is testing a note");

                // Mark the client as typing
                await client.SetTyping(roomName);

                // Clear the note
                await client.SetNote(null);

                // Say hello to the room
                await client.Send("Hello world", roomName);

                if (roomInfo.Owners.Contains(userName))
                {
                    // Post a notification (You must be room owner)
                    //await client.PostNotification(new ClientNotification
                    //{
                    //    Source = "Github",
                    //    Content = "This is a fake github notification from the client",
                    //    ImageUrl = "data:image/png;base64,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",
                    //    Room = "test"
                    //});
                }

                Console.WriteLine("Press any key to leave the room and disconnect");

                Console.Read();

                await client.LeaveRoom(roomName);

                client.Disconnect();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: " + ex.GetBaseException().Message);
            }
            finally
            {
                wh.Set();
            }
        }