// , // /| __ // / | ,-~ / // Y :| // / // | jj /( .^ // >-"~"-v" // / Y // jo o | // ( ~T~j // >._-' _./ // / "~" | // Y _, | // /| ;-"~ _ l /// l/ ,-"~ \ //\//\/ .- \ // Y / Y -Row // l I ! // ]\ _\ /"\ //(" ~----( ~ Y. ) #endregion bunny public async Task <DiscordMessage> SendWebhookMessage(string content = null, DiscordEmbed[] embeds = null, FileStream fileStream = null, string fileName = null) { var dwb = new DiscordWebhookBuilder(); if (!(embeds is null)) { if (embeds.Length > 10) { throw new ArgumentException("More than 10 embeds provided."); } dwb.AddEmbeds(embeds); } if (!(content is null)) { dwb.WithContent(content); } if (!(fileStream is null) && !(fileName is null)) { dwb.AddFile(Path.GetFileName(fileName), fileStream); } if (embeds is null && content is null && fileStream is null) { throw new ArgumentException("Cannot send an empty message."); } return(await webhook.ExecuteAsync(dwb)); }
private async Task AddAttachmentsToBuilder(DiscordWebhookBuilder dwb, IReadOnlyCollection <DiscordAttachment> attachments) { async Task <(DiscordAttachment, Stream)> GetStream(DiscordAttachment attachment) { var attachmentResponse = await _client.GetAsync(attachment.Url, HttpCompletionOption.ResponseHeadersRead); return(attachment, await attachmentResponse.Content.ReadAsStreamAsync()); } foreach (var(attachment, attachmentStream) in await Task.WhenAll(attachments.Select(GetStream))) { dwb.AddFile(attachment.FileName, attachmentStream); } }
public async Task SpoilCommand(CommandContext ctx, [Description("The message text"), RemainingText] string content) { var message = new DiscordWebhookBuilder(); foreach (var attachment in ctx.Message.Attachments) { message.AddFile("SPOILER_" + attachment.FileName, GetStreamFromUrl(attachment.Url)); } message.WithContent(content); message.WithAvatarUrl(ctx.Member.GetAvatarUrl(ImageFormat.Auto)); message.WithUsername(ctx.Member.DisplayName); var webhook = (await ctx.Channel.GetWebhooksAsync()).FirstOrDefault(); if (webhook == null) { webhook = await ctx.Channel.CreateWebhookAsync("SpoilHook"); } await webhook.ExecuteAsync(message); }
#pragma warning disable 4014 new public static void OnStart(DiscordClient discord, IConfiguration configuration) { var context = new dataContext(); discord.MessageCreated += async(client, args) => { Task.Run(async() => { if (!args.Message.Content.StartsWith("\\") && // Not escaped context.Anonchannels.Any(c => c.Id == args.Channel.Id.ToString()) && // In an anon channel !args.Author.IsBot && // Not a bot !context.AnonBans.AsNoTracking().AsEnumerable().Any(u => u.User == args.Author.Id.ToString() && // AsNoTracking used to avoid cache u.Server == args.Guild.Id.ToString() && (u.ExpiresAt == (ulong)0 || u.ExpiresAt > (ulong)DateTimeOffset.Now.ToUnixTimeSeconds()))) // Not anonbanned { if (args.Message.Attachments.Count == 0) { try { await args.Message.DeleteAsync(); } catch { } } // TODO: Work around rate limit here var webhook = await args.Channel.CreateWebhookAsync("Anon"); var msg = new DiscordWebhookBuilder().WithContent(args.Message.Content.CleanPings(args.Guild)); foreach (var attachment in args.Message.Attachments) { var fileStream = WebRequest.Create(attachment.ProxyUrl).GetResponse().GetResponseStream(); msg.AddFile(attachment.FileName, fileStream); } var anonMessage = await webhook.ExecuteAsync(msg); await webhook.DeleteAsync(); try { await args.Message.DeleteAsync(); } catch { } await context.Anonmessages.AddAsync(new Anonmessage { Id = anonMessage.Id.ToString(), Server = anonMessage.Channel.GuildId.ToString(), User = args.Author.Id.ToString() }); await context.SaveChangesAsync(); } } ); }; }