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); }
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); }
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); } }
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); }
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); } } }
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); } }
public EmbedCache(SocketGuild server) { cacheDate = DateTime.Now; color = server.GetMemory().GetData <CommandSystem, CommandServerData>().embedColor.Value; }