Esempio n. 1
0
        public MessageContext(IMessage message, SocketGuild server, SocketGuildUser user, string content = null, bool?isCommand = null, SocketTextChannel channel = null)
        {
            this.message = message;
            this.server  = server;
            this.user    = user;
            this.content = content ?? "";

            messageChannel    = channel;
            socketTextChannel = channel;

            Setup();

            this.isCommand = isCommand ?? this.content.StartsWith(server?.GetMemory()?.GetData <CommandSystem, CommandServerData>()?.commandPrefix ?? MopBot.DefaultCommandPrefix);
        }
Esempio n. 2
0
 private void Setup(RestUserMessage message)
 {
     //Message
     this.message = restMessage = message;
     //User
     user = message.Author;
     //Channel
     messageChannel = message.Channel;
     //Server
     server = MopBot.client.Guilds.FirstOrDefault(s => s.Channels.Any(c => c.Id == messageChannel.Id));
     //Other
     content   = message.Content ?? "";
     isCommand = content.StartsWith(server?.GetMemory()?.GetData <CommandSystem, CommandServerData>()?.commandPrefix ?? MopBot.DefaultCommandPrefix);
 }
Esempio n. 3
0
        private static async Task TrySendEmbed(SocketGuild server, IUser user, Func <EmbedBuilder, EmbedBuilder> embedFunc)
        {
            var serverData = server.GetMemory().GetData <LoggingSystem, LoggingServerData>();

            if (!serverData.TryGetLoggingChannel(server, out var loggingChannel))
            {
                return;
            }

            var embed = embedFunc(GetUserEmbed(server, user))?.Build();

            if (embed != null)
            {
                await loggingChannel.SendMessageAsync(embed : embed);
            }
        }
Esempio n. 4
0
 private void Setup(SocketMessage message)
 {
     //Message
     this.message = socketMessage = message;
     //User
     user             = socketUser = message.Author;
     socketServerUser = socketUser as SocketGuildUser;
     //Channel
     messageChannel      = socketMessageChannel = message.Channel;
     socketServerChannel = socketMessageChannel as SocketGuildChannel;
     socketTextChannel   = socketServerChannel as SocketTextChannel;
     //Server
     server = socketServerChannel?.Guild;
     //Other
     content   = message.Content ?? "";
     isCommand = content.StartsWith(server?.GetMemory()?.GetData <CommandSystem, CommandServerData>()?.commandPrefix ?? MopBot.DefaultCommandPrefix);
 }
Esempio n. 5
0
        public override async Task ServerUpdate(SocketGuild server)
        {
            var    memory   = server.GetMemory().GetData <ConfigurationSystem, ConfigurationServerData>();
            string nickname = memory.forcedNickname;

            var currentUser = server.GetUser(MopBot.client.CurrentUser.Id);

            if (currentUser != null && !string.Equals(currentUser.Nickname, nickname, StringComparison.InvariantCulture) && !(nickname == "MopBot" && currentUser.Nickname == null) && currentUser.HasDiscordPermission(p => p.ChangeNickname))
            {
                try {
                    await currentUser.ModifyAsync(u => u.Nickname = nickname);
                }
                catch (Exception e) {
                    await MopBot.HandleException(e);
                }
            }
        }
Esempio n. 6
0
        public override async Task ServerUpdate(SocketGuild server)
        {
            var triviaServerData = server.GetMemory().GetData <TriviaSystem, TriviaServerData>();

            if (!triviaServerData.IsReady)
            {
                return;                 //TODO: Let the admins know that this is misconfigured.
            }

            var now = DateTime.Now;

            if ((now - triviaServerData.lastTriviaPost).TotalSeconds <= triviaServerData.postIntervalInSeconds)
            {
                return;
            }

            triviaServerData.lastTriviaPost = now;
            triviaServerData.currentChannel = triviaServerData.triviaChannels[MopBot.Random.Next(triviaServerData.triviaChannels.Count)];

            var channel = server.GetTextChannel(triviaServerData.currentChannel);

            if (channel == null)
            {
                return;                 //TODO: Same as above
            }

            TriviaQuestion[] validQuestions;

            //Find questions we didn't pick yet, handle running out of them.
            while (true)
            {
                lock (triviaServerData.questions) {
                    validQuestions = triviaServerData.questions.Where(q => !q.wasPosted).ToArray();
                }

                if (validQuestions.Length == 0)
                {
                    if (triviaServerData.autoClearCache && triviaServerData.questions.Count > 0)
                    {
                        ClearCache(triviaServerData);

                        continue;
                    }
                    else
                    {
                        await channel.SendMessageAsync($"{server.Owner.Mention} We're out of trivia questions!\r\n\r\nAdd new questions, or..\r\n• Use `!trivia clearcache` to clear list of used questions;\r\n• Use `!trivia autoclearcache true` to automate this process, if you're fully okay with same questions being repeat;");

                        return;
                    }
                }

                break;
            }

            //Set new question
            triviaServerData.currentQuestion           = validQuestions[MopBot.Random.Next(validQuestions.Length)];
            triviaServerData.currentQuestion.wasPosted = true;
            currentQuestionRegex = null;             //This will cause a new one to be made, when needed.

            string     mention             = null;
            SocketRole role                = null;
            bool       disallowRoleMention = false;
            var        currentUser         = server.CurrentUser;

            if (triviaServerData.triviaRole > 0)
            {
                role = server.GetRole(triviaServerData.triviaRole);

                if (role != null)
                {
                    if (!role.IsMentionable && currentUser.HasDiscordPermission(gp => gp.ManageRoles))
                    {
                        await role.ModifyAsync(rp => rp.Mentionable = true);

                        disallowRoleMention = true;
                    }

                    mention = role.Mention;
                }
                else
                {
                    triviaServerData.triviaRole = 0;
                }
            }

            var embedBuilder = MopBot.GetEmbedBuilder(server)
                               .WithAuthor("The next question is...")  //.WithTitle("The next question is...")
                               .WithDescription($"**{triviaServerData.currentQuestion.question}**")
                               .WithFooter("Type your answer right in this channel!");

            if (triviaServerData.thumbnailUrls?.Length > 0 == true)
            {
                try {
                    embedBuilder.WithThumbnailUrl(triviaServerData.thumbnailUrls[MopBot.Random.Next(triviaServerData.thumbnailUrls.Length)]);
                }
                catch {}
            }

            await channel.SendMessageAsync(mention, embed : embedBuilder.Build());

            if (disallowRoleMention)
            {
                await role.ModifyAsync(rp => rp.Mentionable = false);
            }

            if (triviaServerData.lockTriviaChannel && currentUser.HasChannelPermission(channel, DiscordPermission.ManageChannel))
            {
                //Unlock the channel, since there's a question now.

                await channel.ModifyPermissions(server.EveryoneRole, op => op.SendMessages == PermValue.Deny?op.Modify(sendMessages : PermValue.Inherit) : op);
            }
        }
Esempio n. 7
0
 public EmbedCache(SocketGuild server)
 {
     cacheDate = DateTime.Now;
     color     = server.GetMemory().GetData <CommandSystem, CommandServerData>().embedColor.Value;
 }