public DiscordClientChannelsService(DiscordSocketClient client, IDiscordClientUsersService discordClientUsersService, UserContextsFactory userContextsFactory, CommandParser commandParser)
 {
     this._client = client;
     this._discordClientUsersService = discordClientUsersService;
     this._userContextsFactory       = userContextsFactory;
     this._commandParser             = commandParser;
     this._client.ChannelCreated    += x => this.ChannelCreated(x);
 }
예제 #2
0
        public IEnumerable <UserContext> GetUsers(DiscordServerContext server)
        {
            var guildUsers = Server.GetGuildUsers(server.Id).Result;

            var userContextFactory = new UserContextsFactory();
            var userContexts       = guildUsers.Select(x => userContextFactory.Create(x));

            return(userContexts);
        }
예제 #3
0
 internal Workflow(Assembly botAssembly, IComponentContext context)
 {
     this._controllersService          = new ControllersService(context, botAssembly, context.Resolve <BotCommandsService>(), context.Resolve <CommandsContainer>());
     this._commandParser               = context.Resolve <CommandParser>();
     this._middlewaresService          = context.Resolve <MiddlewaresService>();
     this._discordServerContextFactory = context.Resolve <DiscordServerContextFactory>();
     this._userContextsFactory         = context.Resolve <UserContextsFactory>();
     this._channelContextFactory       = context.Resolve <ChannelContextFactory>();
     this._userRoleFactory             = context.Resolve <UserRoleFactory>();
 }
예제 #4
0
        public async Task <IEnumerable <Message> > GetMessages(DiscordServerContext server, ChannelContext channel, int limit, ulong fromMessageId = 0, bool goBefore = true)
        {
            var textChannel = (ITextChannel)this.GetChannel(channel.Id).Result;

            if (!this.CanBotReadTheChannel(textChannel))
            {
                return(new List <Message>());
            }

            IEnumerable <IMessage> channelMessages;

            if (fromMessageId == 0)
            {
                channelMessages = await textChannel.GetMessagesAsync(limit).FlattenAsync();
            }
            else
            {
                channelMessages = await textChannel.GetMessagesAsync(fromMessageId, goBefore?Direction.Before : Direction.After, limit).FlattenAsync();
            }

            var userFactory = new UserContextsFactory();
            var messages    = channelMessages.Select(message =>
            {
                var user     = userFactory.Create(message.Author);
                var contexts = new Contexts();
                contexts.SetContext(server);
                contexts.SetContext(channel);
                contexts.SetContext(user);

                var commandParser = new CommandParser();
                DiscordRequest request;
                try
                {
                    request = commandParser.Parse(message.Content, message.Timestamp.UtcDateTime);
                }
                catch // should almost never go to catch block, but in rare cases Parse() can throw an exception
                {
                    request = new DiscordRequest
                    {
                        OriginalMessage = message.Content,
                        SentAt          = message.Timestamp.UtcDateTime
                    };
                }
                return(new Message(message.Id, request, contexts));
            });

            return(messages);
        }
예제 #5
0
        private async Task CallUserJoined(SocketGuildUser guildUser)
        {
            var userFactory   = new UserContextsFactory();
            var serverFactory = new DiscordServerContextFactory();

            var userContext = userFactory.Create(guildUser);
            var guild       = await Server.GetGuild(guildUser.Guild.Id);

            var discordServerContext = serverFactory.Create(guild);
            var landingChannel       = discordServerContext.LandingChannel;

            var contexts = new Contexts();

            contexts.SetContext(userContext);
            contexts.SetContext(discordServerContext);
            if (landingChannel != null)
            {
                contexts.SetContext(landingChannel);
            }

            OnUserJoined.ForEach(x => x.Invoke(contexts));
        }
        public async Task <IEnumerable <Message> > GetMessages(DiscordServerContext server, ChannelContext channel, int limit, ulong fromMessageId = 0, bool goBefore = true)
        {
            var textChannel = (ITextChannel)this.GetChannel(channel.Id).Result;

            if (!this.CanBotReadTheChannel(textChannel))
            {
                return(new List <Message>());
            }

            IEnumerable <IMessage> channelMessages;

            if (fromMessageId == 0)
            {
                channelMessages = await textChannel.GetMessagesAsync(limit).FlattenAsync();
            }
            else
            {
                channelMessages = await textChannel.GetMessagesAsync(fromMessageId, goBefore?Direction.Before : Direction.After, limit).FlattenAsync();
            }

            var userFactory = new UserContextsFactory();
            var messages    = channelMessages.Select(message =>
            {
                var user     = userFactory.Create(message.Author);
                var contexts = new Contexts();
                contexts.SetContext(server);
                contexts.SetContext(channel);
                contexts.SetContext(user);

                var commandParser = new CommandParser();
                var request       = commandParser.Parse(message.Content, message.Timestamp.UtcDateTime);
                return(new Message(message.Id, request, contexts));
            });

            return(messages);
        }
예제 #7
0
 public UserMiddleware(IComponentContext context)
 {
     this._userContextsFactory = new UserContextsFactory(context, context.Resolve <UsersService>());
 }
예제 #8
0
 public UsersService()
 {
     this._userContextsFactory = new UserContextsFactory();
 }
예제 #9
0
 public UserMiddleware()
 {
     this.userContextsFactory = new UserContextsFactory();
 }
예제 #10
0
 public UsersService(IComponentContext context)
 {
     this._userContextsFactory = new UserContextsFactory(context, this);
 }