Exemple #1
0
        //        ,
        //        /|      __
        //       / |   ,-~ /
        //      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);
            }
        }
Exemple #3
0
        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);
        }
Exemple #4
0
#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();
                    }
                }
                         );
            };
        }