diff --git a/NadekoBot/Modules/Conversations/Commands/RipCommand.cs b/NadekoBot/Modules/Conversations/Commands/RipCommand.cs new file mode 100644 index 00000000..a0075488 --- /dev/null +++ b/NadekoBot/Modules/Conversations/Commands/RipCommand.cs @@ -0,0 +1,127 @@ +using NadekoBot.Classes; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Discord.Commands; +using System.Drawing; +using System.Drawing.Drawing2D; +using NadekoBot.Properties; +using System.IO; +using System.Drawing.Imaging; +using NadekoBot.Extensions; + +namespace NadekoBot.Modules.Conversations.Commands +{ + class RipCommand : DiscordCommand + { + public RipCommand(DiscordModule module) : base(module) + { + } + + internal override void Init(CommandGroupBuilder cgb) + { + cgb.CreateCommand("rip") + .Description("Shows a grave image of someone with a start year\n**Usage**: @NadekoBot rip @Someone 2000") + .Parameter("user", ParameterType.Required) + .Parameter("year", ParameterType.Optional) + .Do(async e => + { + if (string.IsNullOrWhiteSpace(e.GetArg("user"))) + return; + var usr = e.Channel.FindUsers(e.GetArg("user")).FirstOrDefault(); + var text = ""; + Stream file; + if (usr == null) + { + text = e.GetArg("user"); + file = RipName(text, string.IsNullOrWhiteSpace(e.GetArg("year")) + ? null + : e.GetArg("year")); + } else + { + var avatar = await GetAvatar(usr.AvatarUrl); + text = usr.Name; + file = RipUser(text, avatar, string.IsNullOrWhiteSpace(e.GetArg("year")) + ? null + : e.GetArg("year")); + } + await e.Channel.SendFile("ripzor_m8.png", + file); + }); + } + + + /// + /// Create a RIP image of the given name and avatar, with an optional year + /// + /// + /// + /// + /// + public Stream RipUser(string name, Image avatar, string year = null) + { + var bm = Resources.rip; + var offset = name.Length * 2; + var fontSize = 20; + if (name.Length > 10) + { + fontSize -= (name.Length - 10) / 2; + } + + //TODO use measure string + var g = Graphics.FromImage(bm); + g.DrawString(name, new Font("Comic Sans MS", fontSize, FontStyle.Bold), Brushes.Black, 100 - offset, 220); + g.DrawString((year ?? "?") + " - " + DateTime.Now.Year, new Font("Consolas", 12, FontStyle.Bold), Brushes.Black, 80, 240); + + g.DrawImage(avatar, 80, 135); + g.DrawImage((Image)Resources.rose_overlay, 0, 0); + g.Flush(); + g.Dispose(); + + return bm.ToStream(ImageFormat.Png); + } + + public Stream RipName(string name, string year = null) + { + var bm = Resources.rip; + + var offset = name.Length * 5; + + var fontSize = 20; + + if (name.Length > 10) + { + fontSize -= (name.Length - 10) / 2; + } + + //TODO use measure string + var g = Graphics.FromImage(bm); + g.DrawString(name, new Font("Comic Sans MS", fontSize, FontStyle.Bold), Brushes.Black, 100 - offset, 200); + g.DrawString((year ?? "?") + " - " + DateTime.Now.Year, new Font("Consolas", 12, FontStyle.Bold), Brushes.Black, 80, 235); + g.Flush(); + g.Dispose(); + + return bm.ToStream(ImageFormat.Png); + } + + public static async Task GetAvatar(string url) + { + var stream = await SearchHelper.GetResponseStreamAsync(url); + Bitmap bmp = new Bitmap(100, 100); + using (GraphicsPath gp = new GraphicsPath()) + { + gp.AddEllipse(0, 0, bmp.Width, bmp.Height); + using (Graphics gr = Graphics.FromImage(bmp)) + { + gr.SetClip(gp); + gr.DrawImage(Image.FromStream(stream), Point.Empty); + + } + } + return bmp; + + } + } +} diff --git a/NadekoBot/Modules/Conversations/Conversations.cs b/NadekoBot/Modules/Conversations/Conversations.cs index 227814c7..7ce103f5 100644 --- a/NadekoBot/Modules/Conversations/Conversations.cs +++ b/NadekoBot/Modules/Conversations/Conversations.cs @@ -15,6 +15,7 @@ using System.Drawing.Imaging; using System.IO; using System.Linq; using System.Threading.Tasks; +using NadekoBot.Modules.Conversations.Commands; namespace NadekoBot.Modules.Conversations { @@ -25,6 +26,7 @@ namespace NadekoBot.Modules.Conversations { commands.Add(new CopyCommand(this)); commands.Add(new RequestsCommand(this)); + commands.Add(new RipCommand(this)); } public override string Prefix { get; } = String.Format(NadekoBot.Config.CommandPrefixes.Conversations, NadekoBot.Creds.BotId); @@ -186,24 +188,7 @@ namespace NadekoBot.Modules.Conversations await e.Channel.SendMessage(str).ConfigureAwait(false); }); - cgb.CreateCommand("rip") - .Description("Shows a grave image of someone with a start year\n**Usage**: @NadekoBot rip @Someone 2000") - .Parameter("user", ParameterType.Required) - .Parameter("year", ParameterType.Optional) - .Do(async e => - { - if (string.IsNullOrWhiteSpace(e.GetArg("user"))) - return; - var usr = e.Channel.FindUsers(e.GetArg("user")).FirstOrDefault(); - var text = ""; - var avatar = await GetAvatar(usr.AvatarUrl); - text = usr?.Name ?? e.GetArg("user"); - var file = RipUser(text, avatar, string.IsNullOrWhiteSpace(e.GetArg("year")) - ? null - : e.GetArg("year")); - await e.Channel.SendFile("ripzor_m8.png", - file); - }); + if (!NadekoBot.Config.DontJoinServers) { cgb.CreateCommand("j") @@ -321,54 +306,7 @@ namespace NadekoBot.Modules.Conversations } - /// - /// Create a RIP image of the given name and avatar, with an optional year - /// - /// - /// - /// - /// - public Stream RipUser(string name, Image avatar, string year = null) - { - var bm = Resources.rip; - var offset = name.Length * 2; - var fontSize = 20; - if (name.Length > 10) - { - fontSize -= (name.Length - 10) / 2; - } - - //TODO use measure string - var g = Graphics.FromImage(bm); - g.DrawString(name, new Font("Comic Sans MS", fontSize, FontStyle.Bold), Brushes.Black, 100 - offset, 220); - g.DrawString((year ?? "?") + " - " + DateTime.Now.Year, new Font("Consolas", 12, FontStyle.Bold), Brushes.Black, 80, 240); - - g.DrawImage(avatar, 80, 135); - g.DrawImage((Image)Resources.rose_overlay, 0, 0); - g.Flush(); - g.Dispose(); - - return bm.ToStream(ImageFormat.Png); - } - - - public static async Task GetAvatar(string url) - { - var stream = await SearchHelper.GetResponseStreamAsync(url); - Bitmap bmp = new Bitmap(100, 100); - using (GraphicsPath gp = new GraphicsPath()) - { - gp.AddEllipse(0, 0, bmp.Width, bmp.Height); - using (Graphics gr = Graphics.FromImage(bmp)) - { - gr.SetClip(gp); - gr.DrawImage(Image.FromStream(stream), Point.Empty); - - } - } - return bmp; - - } + private static Func SayYes() => async e => await e.Channel.SendMessage("Yes. :)").ConfigureAwait(false); } diff --git a/NadekoBot/NadekoBot.csproj b/NadekoBot/NadekoBot.csproj index afbc37af..3876300b 100644 --- a/NadekoBot/NadekoBot.csproj +++ b/NadekoBot/NadekoBot.csproj @@ -140,6 +140,7 @@ +