async Task SingleRule(ParseResult result, IMessageCreatedEvent messageEvent) { var guild = messageEvent.Guild !; var num = result.GetIntArg("num"); await messageEvent.Db.Entry(guild).Collection(g => g !.Rules).LoadAsync(); guild !.Rules.Sort((a, b) => a.Number - b.Number); var rule = guild !.Rules.Find(r => r.Number == num); if (rule == null) { await messageEvent.RespondError($"Could not find rule {num}"); return; } var text = $"{DiscordEmoji.FromName(DiscordBot.Instance.Client, $":{rule.Number.ToName()}:")} {rule.Description}"; var embed = DiscordBot.Instance.BaseEmbed(); embed.Description = text; await messageEvent.Respond(embed.Build()); }
private async Task RemoveRule(ParseResult result, IMessageCreatedEvent messageEvent) { var guild = messageEvent.Guild !; var num = result.GetIntArg("num"); await messageEvent.Db.Entry(guild).Collection(g => g !.Rules).LoadAsync(); guild !.Rules.Sort((a, b) => a.Number - b.Number); var rule = guild !.Rules.Find(r => r.Number == num); if (rule == null) { messageEvent.RespondError($"Could not find rule {num}"); return; } guild.Rules.Remove(rule); messageEvent.Db.Remove(rule); guild.Rules.ContinuouslyNumber(((guildRule, i) => guildRule.Number = i), 1); messageEvent.Respond("Removed"); await messageEvent.Db.SaveChangesAsync(); await UpdateRules(messageEvent); return; }
private async Task UpdateRules(IMessageCreatedEvent messageEvent) { var guild = messageEvent.Guild !; if (guild.RulesChannelId == null || guild.RulesMessageId == null) { return; } await messageEvent.Db.Attach(guild).Collection(g => g.Rules).LoadAsync(); var text = RulesText(guild); var embed = DiscordBot.Instance.BaseEmbed(); embed.Title = "Server Rules"; embed.Description = text; embed.Author = null; if (guild.RulesChannelId is not null && guild.RulesMessageId != null) { var DGuild = await _bot.Client.GetGuildAsync(new Snowflake(guild.GuildID)); var ch = DGuild.GetChannel((guild.RulesChannelId ?? null)); var me = await ch.GetMessageAsync(guild.RulesMessageId ?? 0L); await me.ModifyAsync(embed : embed.Build()); } }
private async Task PrintQuote(ParseResult result, IMessageCreatedEvent context) { var db = context.Db; var num = result.GetIntArg("number"); var guild = context.Guild; if (guild != null) { var quote = (from q in db.Quotes.Include(a => a.Source) where q.number == num && q.GuildID == guild.ID select q).FirstOrDefault(); if (quote != null) { var embed = DiscordBot.Instance.BaseEmbed(); embed.Description = quote.Text; if (quote.CreationTime.Year <= 1) { embed.Timestamp = new DateTimeOffset(); } else { embed.Timestamp = quote.EventTime; } embed.Author = new DiscordEmbedBuilder.EmbedAuthor(); if (quote.Source != null) { var discordGuild = await DiscordBot.Instance.Client.GetGuildAsync(guild.GuildID); var sourceMember = await discordGuild.GetMemberAsync(ulong.Parse(quote.Source.UserID)); embed.Author.IconUrl = sourceMember.AvatarUrl; embed.Author.Name = sourceMember.Nickname ?? sourceMember.Username; } embed.Footer = new DiscordEmbedBuilder.EmbedFooter() { Text = $"on {quote.CreationTime.ToLongDateString()}" }; await context.Respond(embed.Build()); } } }
public override async Task <bool> CheckCondition(CommandFunction func, IMessageCreatedEvent context, ICommandConditionProvider provider) { var attribute = (CommandPermissionRequired)provider; var db = context.Db; if (context.Guild is not null) { db.Entry(context.Guild).Collection(g => g.PermissionLevels).LoadAsync().Wait(); //var member = await ((DiscordMessageCreatedEvent)context)[email protected](ulong.Parse(context.Author.UserID)); var DGuild = await _bot.Client.GetGuildAsync(new Snowflake(context.Guild.GuildID)); PermissionLevels memberLevel = PermissionLevels.None; if (context.Author.UserID == _conf.Value.Owner || context.Author.UserID == DGuild.OwnerId.ToString()) { memberLevel = PermissionLevels.Owner; } var member = await DGuild.GetMemberAsync(new Snowflake(context.Author.UserID)); foreach (var guildLevel in context.Guild.PermissionLevels) { if (member.Roles.Any(r => r.Id.ToString() == guildLevel.RoleID)) { if (guildLevel.PermissionLevel > memberLevel) { memberLevel = guildLevel.PermissionLevel; } } } if (attribute._permission > memberLevel) { context.RespondError($"You do not have the needed permissions. \n You must be {attribute._permission.ToString()} or above"); return(false); } return(true); } return(false); }
private async Task ServerSetup(ParseResult result, IMessageCreatedEvent context) { if (context.Guild != null) { await context.Respond("Server already active"); return; } if (context is DiscordMessageCreatedEvent dmce) { var message = dmce.@event; DiscordGuild discord_guild = message.Guild; var member = await message.Guild.GetMemberAsync(message.Message.Author.Id); var permissions = member.PermissionsIn(message.Message.Channel); if (permissions.HasPermission(Permissions.Administrator) || member.Id.ToString() == config.Value.Owner) { Guild?guild = (from g in context.Db.Guilds where g.GuildID == discord_guild.Id select g).FirstOrDefault(); if (guild == null) { logger.Information($"Registering guild: {discord_guild.Id}"); context.Db.Add(new Guild(discord_guild.Name, discord_guild.Id.ToString())); context.Db.SaveChanges(); var embed = new DSharpPlus.Entities.DiscordEmbedBuilder() { Description = "Server setup complete!" }; await message.Message.RespondAsync(embed : embed.Build()); } } else { await message.Message.RespondAsync("You do not have the permission"); } } }
async Task ListRules(ParseResult result, IMessageCreatedEvent messageEvent) { var guild = messageEvent.Guild !; messageEvent.Db.Attach(guild); await messageEvent.Db.Entry(guild).Collection(g => g !.Rules).LoadAsync(); var text = RulesText(guild); var embed = new DiscordEmbedBuilder() { Description = text }; await messageEvent.Respond(embed.Build()); }
private int Run(ParseResult result, IMessageCreatedEvent context) { /* * string messageTemplate = "Hi! " + DiscordArgumentTypes.GetUser(context, "user").Username + " <a:bolbreach:780085145079119873>"; * Logger.Information(messageTemplate); * //[email protected](messageTemplate); * * context.Source.Event.Respond(messageTemplate); */ DiscordUser u = (DiscordUser)result.Args["user"]; string messageTemplate = "Hi! " + u.Username + " <a:bolbreach:780085145079119873>"; context.RespondBasic(messageTemplate); return(1); }
private async Task AddRule(ParseResult result, IMessageCreatedEvent messageEvent) { var guild = messageEvent.Guild !; var db = messageEvent.Db; var rule_count = db.Attach(guild).Collection(g => g.Rules).Query().Count(); int num = rule_count + 1; string text = result.GetStringArg("text"); guild.Rules.Add(new GuildRule(num, text)); await messageEvent.Db.SaveChangesAsync(); await messageEvent.Respond("Added"); await UpdateRules(messageEvent); }
public async Task RunCommand(ParseResult result, IMessageCreatedEvent msgEvent) { var callback = (result.Callback as CommandFunction) !; var method = callback.cmdMeta; var permission = method.GetCustomAttributes <CommandAttribute>(); var commandConditionProviders = permission.ToList(); _logger.LogInformation( "Command {CmdName} has the following conditions:\n" + "{Conditions}", "CMD name", String.Join("\n", commandConditionProviders.Select(p => p.GetType().Name))); bool check = true; foreach (var attribute in commandConditionProviders) { var con = ActivatorUtilities.CreateInstance(_provider, attribute.GetCondition()) as CommandCondition; check = check && await con !.CheckCondition(callback, msgEvent, attribute); } if (check) { try { callback.Cmd.Invoke(result, msgEvent); } catch (Exception e) { msgEvent.RespondError(e.Message); } } else { //msgEvent.RespondError("Couldn't authenticate"); } }
private async Task RemoveQuote(ParseResult result, IMessageCreatedEvent context) { var db = context.Db; var num = result.GetIntArg("id"); var guild = context.Guild; var quote = (from q in db.Quotes where q.number == num && q.GuildID == guild !.ID select q).FirstOrDefault(); if (quote != null) { await db.Entry(quote).Reference(r => r.Source).LoadAsync(); guild !.Quotes.Remove(quote); await db.SaveChangesAsync(); var embed = DiscordBot.Instance.BaseEmbed(); embed.Title = $"{EmojiHelper.Cross()} Removed Quote"; embed.Color = new Optional <DiscordColor>(new DiscordColor(255, 0, 0)); embed.Description = $"> {quote.Text}\nby {quote.SourceName}"; embed.Timestamp = quote.CreationTime.Year > 1 ? quote.CreationTime : new DateTimeOffset(); embed.Footer = new DiscordEmbedBuilder.EmbedFooter() { Text = $"on {quote.CreationTime.ToLongDateString()}" }; await context.Respond(embed.Build()); return; } else { throw new Exception($"There was no quote {num}"); } }
private async Task ListQuotes(ParseResult result, IMessageCreatedEvent context) { var db = context.Db; var guild = context.Guild; if (guild != null) { var discordGuildAsync = DiscordBot.Instance.Client.GetGuildAsync(guild.GuildID); string text = ""; var q = from h in db.Quotes.Include(blog => blog.Source) where h.Guild == guild select h; foreach (var quote in q) { if (quote.Source != null) { var discordGuild = await discordGuildAsync; var sourceMember = (await discordGuild.GetMemberAsync(ulong.Parse(quote.Source.UserID))).Nickname; //var sourceMember = quote.Source.Name; text += $"\n{EmojiHelper.Number(quote.number)} *{quote.Text}* - by {sourceMember}"; } else { text += $"\n{EmojiHelper.Number(quote.number)} *{quote.Text}* - by *Anonymous*"; } } var embed = DiscordBot.Instance.BaseEmbed(); embed.Title = "Qotes"; embed.Description = text; embed.Author = null; await context.Respond(embed.Build()); } }
public void ProcessMessage(IMessageCreatedEvent messageEvent) { if (messageEvent.Message.Length == 0 || !messageEvent.Message.StartsWith(_config.Value.prefix)) { return; } var commandText = messageEvent.Message.Remove(0, _config.Value.prefix.Length); var res = _cmdTree.tree.ParseString(commandText); if (res.error is not null) { var usages = res.Nodes.Last().GetUsages(res); string text = "Usage"; foreach (var item in usages) { text += $"\n {item}"; } messageEvent.RespondError(text); } if (res.Callback is not null) { try { if (res.Callback is CommandFunction func) { //func.Cmd(res, messageEvent); RunCommand(res, messageEvent); } } catch (Exception e) { _logger.LogCritical(e, "Critical Exception while running command: {Message}", messageEvent.Message); messageEvent.RespondError("Error"); } } }
async Task PlaceRules(ParseResult result, IMessageCreatedEvent messageEvent) { var guild = messageEvent.Guild !; messageEvent.Db.Attach(guild); await messageEvent.Db.Entry(guild).Collection(g => g !.Rules).LoadAsync(); var text = RulesText(guild); var embed = DiscordBot.Instance.BaseEmbed(); embed.Title = "Server Rules"; embed.Description = text; embed.Author = null; var message = await messageEvent.Respond(embed.Build()); guild.RulesMessageId = message.Id.ToString(); guild.RulesChannelId = message.ChannelId.ToString(); await messageEvent.Db.SaveChangesAsync(); }
private int Run(ParseResult result, IMessageCreatedEvent discordmessageevent) { discordmessageevent.Respond("pong!"); return(0); }
public CommandExecutionContext(IMessageCreatedEvent @event) { Event = @event; Db = @event.Db; }
private async Task AddQuote(ParseResult result, IMessageCreatedEvent context) { var db = context.Db; User creator = context.Author; User?source = null; DateTime date = context.Time; DateTime eventTime = context.Time; string text = ""; if (context.HasRefMessage) { text = context.RefMessageText !; source = context.RefMessageAuthor ?? null; eventTime = context.RefMessageTime?.Date ?? context.Time; } else { if (result.Args.ContainsKey("text")) { text = result.GetStringArg("text"); } if (string.IsNullOrWhiteSpace(text)) { await context.RespondError("Dind't find text to quote"); return; } if (result.Args.ContainsKey("source")) { var user = (DiscordUser)result.Args["source"]; source = db.GetOrCreateUserFor(user); } } await db.Entry(context.Guild).Collection(d => d !.Quotes).LoadAsync(); context.Guild !.Quotes.Sort((a, b) => a.number - b.number); var last = context.Guild.Quotes.LastOrDefault(); var next_num = last?.number + 1 ?? 0; var entity = new Quote(creator.ID, source?.ID, context.Guild.ID, date, eventTime, text, null, next_num); db.Add(entity); var embed = DiscordBot.Instance.BaseEmbed(); embed.Color = new Optional <DiscordColor>(new DiscordColor(0, 255, 0)); embed.Title = $"Added new quote number {entity.number}:"; embed.Description = $"> {text}"; embed.Footer = new DiscordEmbedBuilder.EmbedFooter() { Text = $"by {entity.SourceName}" }; await context.Respond(embed.Build()); await db.SaveChangesAsync(); }
public abstract Task <bool> CheckCondition(CommandFunction func, IMessageCreatedEvent context, ICommandConditionProvider provider);
public void ProcessEvent(IMessageCreatedEvent messageCreatedEvent) { //_logger.LogInformation(messageCreatedEvent.Message); ProcessMessage(messageCreatedEvent); }