Work on gambling, lolban
This commit is contained in:
		| @@ -1,4 +1,6 @@ | ||||
| using Discord; | ||||
| using Discord.Commands; | ||||
| using NadekoBot.Attributes; | ||||
| using NadekoBot.Classes; | ||||
| using NadekoBot.Extensions; | ||||
| using System; | ||||
| @@ -9,154 +11,142 @@ using System.Threading.Tasks; | ||||
|  | ||||
| namespace NadekoBot.Modules.Gambling | ||||
| { | ||||
|     public partial class DiceRollCommands | ||||
|     public partial class Gambling | ||||
|     { | ||||
|         private Regex dndRegex { get; } = new Regex(@"(?<n1>\d+)d(?<n2>\d+)", RegexOptions.Compiled); | ||||
|         ////todo drawing | ||||
|         //[LocalizedCommand, LocalizedDescription, LocalizedSummary] | ||||
|         //[RequireContext(ContextType.Guild)] | ||||
|         //public Task Roll(IMessage imsg, [Remainder] string arg = null) => | ||||
|         //    InternalRoll(imsg, arg, true); | ||||
|  | ||||
|         public DiceRollCommand(DiscordModule module) : base(module) { } | ||||
|         //[LocalizedCommand, LocalizedDescription, LocalizedSummary] | ||||
|         //[RequireContext(ContextType.Guild)] | ||||
|         //public Task Rolluo(IMessage imsg, [Remainder] string arg = null) => | ||||
|         //    InternalRoll(imsg, arg, false); | ||||
|  | ||||
|         //private async Task InternalRoll(IMessage imsg, string arg, bool ordered) { | ||||
|         //    var channel = imsg.Channel as ITextChannel; | ||||
|         //    var r = new Random(); | ||||
|         //    if (string.IsNullOrWhiteSpace(arg)) | ||||
|         //    { | ||||
|         //        var gen = r.Next(0, 101); | ||||
|  | ||||
|         internal override void Init(CommandGroupBuilder cgb) | ||||
|         //        var num1 = gen / 10; | ||||
|         //        var num2 = gen % 10; | ||||
|  | ||||
|         //        var imageStream = await new Image[2] { GetDice(num1), GetDice(num2) }.Merge().ToStream(ImageFormat.Png); | ||||
|  | ||||
|         //        await channel.SendFileAsync(imageStream, "dice.png").ConfigureAwait(false); | ||||
|         //        return; | ||||
|         //    } | ||||
|         //    Match m; | ||||
|         //    if ((m = dndRegex.Match(arg)).Length != 0) | ||||
|         //    { | ||||
|         //        int n1; | ||||
|         //        int n2; | ||||
|         //        if (int.TryParse(m.Groups["n1"].ToString(), out n1) && | ||||
|         //            int.TryParse(m.Groups["n2"].ToString(), out n2) && | ||||
|         //            n1 <= 50 && n2 <= 100000 && n1 > 0 && n2 > 0) | ||||
|         //        { | ||||
|         //            var arr = new int[n1]; | ||||
|         //            for (int i = 0; i < n1; i++) | ||||
|         //            { | ||||
|         //                arr[i] = r.Next(1, n2 + 1); | ||||
|         //            } | ||||
|         //            var elemCnt = 0; | ||||
|         //            await channel.SendMessageAsync($"`Rolled {n1} {(n1 == 1 ? "die" : "dice")} 1-{n2}.`\n`Result:` " + string.Join(", ", (ordered ? arr.OrderBy(x => x).AsEnumerable() : arr).Select(x => elemCnt++ % 2 == 0 ? $"**{x}**" : x.ToString()))).ConfigureAwait(false); | ||||
|         //        } | ||||
|         //        return; | ||||
|         //    } | ||||
|         //    try | ||||
|         //    { | ||||
|         //        var num = int.Parse(e.Args[0]); | ||||
|         //        if (num < 1) num = 1; | ||||
|         //        if (num > 30) | ||||
|         //        { | ||||
|         //            await channel.SendMessageAsync("You can roll up to 30 dice at a time.").ConfigureAwait(false); | ||||
|         //            num = 30; | ||||
|         //        } | ||||
|         //        var dices = new List<Image>(num); | ||||
|         //        var values = new List<int>(num); | ||||
|         //        for (var i = 0; i < num; i++) | ||||
|         //        { | ||||
|         //            var randomNumber = r.Next(1, 7); | ||||
|         //            var toInsert = dices.Count; | ||||
|         //            if (ordered) | ||||
|         //            { | ||||
|         //                if (randomNumber == 6 || dices.Count == 0) | ||||
|         //                    toInsert = 0; | ||||
|         //                else if (randomNumber != 1) | ||||
|         //                    for (var j = 0; j < dices.Count; j++) | ||||
|         //                    { | ||||
|         //                        if (values[j] < randomNumber) | ||||
|         //                        { | ||||
|         //                            toInsert = j; | ||||
|         //                            break; | ||||
|         //                        } | ||||
|         //                    } | ||||
|         //            } | ||||
|         //            else | ||||
|         //            { | ||||
|         //                toInsert = dices.Count; | ||||
|         //            } | ||||
|         //            dices.Insert(toInsert, GetDice(randomNumber)); | ||||
|         //            values.Insert(toInsert, randomNumber); | ||||
|         //        } | ||||
|  | ||||
|         //        var bitmap = dices.Merge(); | ||||
|         //        await channel.SendMessageAsync(values.Count + " Dice rolled. Total: **" + values.Sum() + "** Average: **" + (values.Sum() / (1.0f * values.Count)).ToString("N2") + "**").ConfigureAwait(false); | ||||
|         //        await channel.SendFileAsync("dice.png", bitmap.ToStream(ImageFormat.Png)).ConfigureAwait(false); | ||||
|         //    } | ||||
|         //    catch | ||||
|         //    { | ||||
|         //        await channel.SendMessageAsync("Please enter a number of dice to roll.").ConfigureAwait(false); | ||||
|         //    } | ||||
|         //} | ||||
|  | ||||
|         [LocalizedCommand, LocalizedDescription, LocalizedSummary] | ||||
|         [RequireContext(ContextType.Guild)] | ||||
|         public async Task NRoll(IMessage imsg, [Remainder] string range) | ||||
|         { | ||||
|             cgb.CreateCommand(Module.Prefix + "roll") | ||||
|                 .Description("Rolls 0-100. If you supply a number [x] it rolls up to 30 normal dice." + | ||||
|                              $" If you split 2 numbers with letter d (xdy) it will roll x dice from 1 to y. | `{Prefix}roll` or `{Prefix}roll 7` or `{Prefix}roll 3d5`") | ||||
|                 .Parameter("num", ParameterType.Optional) | ||||
|                 .Do(RollFunc()); | ||||
|  | ||||
|             cgb.CreateCommand(Module.Prefix + "rolluo") | ||||
|                 .Description("Rolls 0-100. If you supply a number [x] it rolls up to 30 normal dice (unordered)." + | ||||
|                              $" If you split 2 numbers with letter d (xdy) it will roll x dice from 1 to y. | `{Prefix}roll` or `{Prefix}roll` 7 or `{Prefix}roll 3d5`") | ||||
|                 .Parameter("num", ParameterType.Optional) | ||||
|                 .Do(RollFunc(false)); | ||||
|  | ||||
|             cgb.CreateCommand(Module.Prefix + "nroll") | ||||
|                 .Description($"Rolls in a given range. | `{Prefix}nroll 5` (rolls 0-5) or `{Prefix}nroll 5-15`") | ||||
|                 .Parameter("range", ParameterType.Required) | ||||
|                 .Do(NRollFunc()); | ||||
|         } | ||||
|  | ||||
|         private Image GetDice(int num) => num != 10 | ||||
|                                           ? Properties.Resources.ResourceManager.GetObject("_" + num) as Image | ||||
|                                           : new[] | ||||
|                                             { | ||||
|                                               (Properties.Resources.ResourceManager.GetObject("_" + 1) as Image), | ||||
|                                               (Properties.Resources.ResourceManager.GetObject("_" + 0) as Image), | ||||
|                                             }.Merge(); | ||||
|             var channel = imsg.Channel as ITextChannel; | ||||
|  | ||||
|  | ||||
|         Regex dndRegex = new Regex(@"(?<n1>\d+)d(?<n2>\d+)", RegexOptions.Compiled); | ||||
|         private Func<CommandEventArgs, Task> RollFunc(bool ordered = true) | ||||
|         { | ||||
|             var r = new Random(); | ||||
|             return async e => | ||||
|             try | ||||
|             { | ||||
|                 var arg = e.Args[0]?.Trim(); | ||||
|                 if (string.IsNullOrWhiteSpace(arg)) | ||||
|                 int rolled; | ||||
|                 if (range.Contains("-")) | ||||
|                 { | ||||
|                     var gen = r.Next(0, 101); | ||||
|  | ||||
|                     var num1 = gen / 10; | ||||
|                     var num2 = gen % 10; | ||||
|  | ||||
|                     var imageStream = new Image[2] { GetDice(num1), GetDice(num2) }.Merge().ToStream(ImageFormat.Png); | ||||
|  | ||||
|                     await e.Channel.SendFile("dice.png", imageStream).ConfigureAwait(false); | ||||
|                     return; | ||||
|                     var arr = range.Split('-') | ||||
|                                     .Take(2) | ||||
|                                     .Select(int.Parse) | ||||
|                                     .ToArray(); | ||||
|                     if (arr[0] > arr[1]) | ||||
|                         throw new ArgumentException("First argument should be bigger than the second one."); | ||||
|                     rolled = new Random().Next(arr[0], arr[1] + 1); | ||||
|                 } | ||||
|                 Match m; | ||||
|                 if ((m = dndRegex.Match(arg)).Length != 0) | ||||
|                 else | ||||
|                 { | ||||
|                     int n1; | ||||
|                     int n2; | ||||
|                     if (int.TryParse(m.Groups["n1"].ToString(), out n1) && | ||||
|                         int.TryParse(m.Groups["n2"].ToString(), out n2) && | ||||
|                         n1 <= 50 && n2 <= 100000 && n1 > 0 && n2 > 0) | ||||
|                     { | ||||
|                         var arr = new int[n1]; | ||||
|                         for (int i = 0; i < n1; i++) | ||||
|                         { | ||||
|                             arr[i] = r.Next(1, n2 + 1); | ||||
|                         } | ||||
|                         var elemCnt = 0; | ||||
|                         await channel.SendMessageAsync($"`Rolled {n1} {(n1 == 1 ? "die" : "dice")} 1-{n2}.`\n`Result:` " + string.Join(", ", (ordered ? arr.OrderBy(x => x).AsEnumerable() : arr).Select(x => elemCnt++ % 2 == 0 ? $"**{x}**" : x.ToString()))).ConfigureAwait(false); | ||||
|                     } | ||||
|                     return; | ||||
|                     rolled = new Random().Next(0, int.Parse(range) + 1); | ||||
|                 } | ||||
|                 try | ||||
|                 { | ||||
|                     var num = int.Parse(e.Args[0]); | ||||
|                     if (num < 1) num = 1; | ||||
|                     if (num > 30) | ||||
|                     { | ||||
|                         await channel.SendMessageAsync("You can roll up to 30 dice at a time.").ConfigureAwait(false); | ||||
|                         num = 30; | ||||
|                     } | ||||
|                     var dices = new List<Image>(num); | ||||
|                     var values = new List<int>(num); | ||||
|                     for (var i = 0; i < num; i++) | ||||
|                     { | ||||
|                         var randomNumber = r.Next(1, 7); | ||||
|                         var toInsert = dices.Count; | ||||
|                         if (ordered) | ||||
|                         { | ||||
|                             if (randomNumber == 6 || dices.Count == 0) | ||||
|                                 toInsert = 0; | ||||
|                             else if (randomNumber != 1) | ||||
|                                 for (var j = 0; j < dices.Count; j++) | ||||
|                                 { | ||||
|                                     if (values[j] < randomNumber) | ||||
|                                     { | ||||
|                                         toInsert = j; | ||||
|                                         break; | ||||
|                                     } | ||||
|                                 } | ||||
|                         } | ||||
|                         else { | ||||
|                             toInsert = dices.Count; | ||||
|                         } | ||||
|                         dices.Insert(toInsert, GetDice(randomNumber)); | ||||
|                         values.Insert(toInsert, randomNumber); | ||||
|                     } | ||||
|  | ||||
|                     var bitmap = dices.Merge(); | ||||
|                     await channel.SendMessageAsync(values.Count + " Dice rolled. Total: **" + values.Sum() + "** Average: **" + (values.Sum() / (1.0f * values.Count)).ToString("N2") + "**").ConfigureAwait(false); | ||||
|                     await e.Channel.SendFile("dice.png", bitmap.ToStream(ImageFormat.Png)).ConfigureAwait(false); | ||||
|                 } | ||||
|                 catch | ||||
|                 { | ||||
|                     await channel.SendMessageAsync("Please enter a number of dice to roll.").ConfigureAwait(false); | ||||
|                 } | ||||
|             }; | ||||
|                 await channel.SendMessageAsync($"{imsg.Author.Mention} rolled **{rolled}**.").ConfigureAwait(false); | ||||
|             } | ||||
|             catch (Exception ex) | ||||
|             { | ||||
|                 await channel.SendMessageAsync($":anger: {ex.Message}").ConfigureAwait(false); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|  | ||||
|         private Func<CommandEventArgs, Task> NRollFunc() => | ||||
|             async e => | ||||
|             { | ||||
|                 try | ||||
|                 { | ||||
|                     int rolled; | ||||
|                     if (e.GetArg("range").Contains("-")) | ||||
|                     { | ||||
|                         var arr = e.GetArg("range").Split('-') | ||||
|                                                  .Take(2) | ||||
|                                                  .Select(int.Parse) | ||||
|                                                  .ToArray(); | ||||
|                         if (arr[0] > arr[1]) | ||||
|                             throw new ArgumentException("First argument should be bigger than the second one."); | ||||
|                         rolled = new Random().Next(arr[0], arr[1] + 1); | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         rolled = new Random().Next(0, int.Parse(e.GetArg("range")) + 1); | ||||
|                     } | ||||
|  | ||||
|                     await channel.SendMessageAsync($"{imsg.Author.Mention} rolled **{rolled}**.").ConfigureAwait(false); | ||||
|                 } | ||||
|                 catch (Exception ex) | ||||
|                 { | ||||
|                     await channel.SendMessageAsync($":anger: {ex.Message}").ConfigureAwait(false); | ||||
|                 } | ||||
|             }; | ||||
|         ////todo drawing | ||||
|         //private Image GetDice(int num) => num != 10 | ||||
|         //                                  ? Properties.Resources.ResourceManager.GetObject("_" + num) as Image | ||||
|         //                                  : new[] | ||||
|         //                                    { | ||||
|         //                                      (Properties.Resources.ResourceManager.GetObject("_" + 1) as Image), | ||||
|         //                                      (Properties.Resources.ResourceManager.GetObject("_" + 0) as Image), | ||||
|         //                                    }.Merge(); | ||||
|     } | ||||
| } | ||||
| @@ -1,91 +1,92 @@ | ||||
| using Discord.Commands; | ||||
| using NadekoBot.Classes; | ||||
| using NadekoBot.Extensions; | ||||
| using NadekoBot.Modules.Gambling.Helpers; | ||||
| using System; | ||||
| using System.Collections.Concurrent; | ||||
| using System.Collections.Generic; | ||||
| using System.Drawing; | ||||
| using System.Threading.Tasks; | ||||
| //using Discord.Commands; | ||||
| //using NadekoBot.Classes; | ||||
| //using NadekoBot.Extensions; | ||||
| //using NadekoBot.Modules.Gambling.Helpers; | ||||
| //using System; | ||||
| //using System.Collections.Concurrent; | ||||
| //using System.Collections.Generic; | ||||
| //using System.Drawing; | ||||
| //using System.Threading.Tasks; | ||||
|  | ||||
| namespace NadekoBot.Modules.Gambling | ||||
| { | ||||
|     internal class DrawCommand : DiscordCommand | ||||
|     { | ||||
|         public DrawCommand(DiscordModule module) : base(module) { } | ||||
| ////todo drawing | ||||
| //namespace NadekoBot.Modules.Gambling | ||||
| //{ | ||||
| //    internal class DrawCommand : DiscordCommand | ||||
| //    { | ||||
| //        public DrawCommand(DiscordModule module) : base(module) { } | ||||
|  | ||||
|         internal override void Init(CommandGroupBuilder cgb) | ||||
|         { | ||||
|             cgb.CreateCommand(Module.Prefix + "draw") | ||||
|                 .Description($"Draws a card from the deck.If you supply number [x], she draws up to 5 cards from the deck. | `{Prefix}draw [x]`") | ||||
|                 .Parameter("count", ParameterType.Optional) | ||||
|                 .Do(DrawCardFunc()); | ||||
| //        internal override void Init(CommandGroupBuilder cgb) | ||||
| //        { | ||||
| //            cgb.CreateCommand(Module.Prefix + "draw") | ||||
| //                .Description($"Draws a card from the deck.If you supply number [x], she draws up to 5 cards from the deck. | `{Prefix}draw [x]`") | ||||
| //                .Parameter("count", ParameterType.Optional) | ||||
| //                .Do(DrawCardFunc()); | ||||
|  | ||||
|             cgb.CreateCommand(Module.Prefix + "shuffle") | ||||
|                 .Alias(Module.Prefix + "sh") | ||||
|                 .Description($"Reshuffles all cards back into the deck.|`{Prefix}shuffle`") | ||||
|                 .Do(ReshuffleTask()); | ||||
|         } | ||||
| //            cgb.CreateCommand(Module.Prefix + "shuffle") | ||||
| //                .Alias(Module.Prefix + "sh") | ||||
| //                .Description($"Reshuffles all cards back into the deck.|`{Prefix}shuffle`") | ||||
| //                .Do(ReshuffleTask()); | ||||
| //        } | ||||
|  | ||||
|         private static readonly ConcurrentDictionary<Discord.Server, Cards> AllDecks = new ConcurrentDictionary<Discord.Server, Cards>(); | ||||
| //        private static readonly ConcurrentDictionary<Discord.Server, Cards> AllDecks = new ConcurrentDictionary<Discord.Server, Cards>(); | ||||
|  | ||||
|         private static Func<CommandEventArgs, Task> ReshuffleTask() | ||||
|         { | ||||
|             return async e => | ||||
|             { | ||||
|                 AllDecks.AddOrUpdate(e.Server, | ||||
|                     (s) => new Cards(), | ||||
|                     (s, c) => | ||||
|                     { | ||||
|                         c.Restart(); | ||||
|                         return c; | ||||
|                     }); | ||||
| //        private static Func<CommandEventArgs, Task> ReshuffleTask() | ||||
| //        { | ||||
| //            return async e => | ||||
| //            { | ||||
| //                AllDecks.AddOrUpdate(e.Server, | ||||
| //                    (s) => new Cards(), | ||||
| //                    (s, c) => | ||||
| //                    { | ||||
| //                        c.Restart(); | ||||
| //                        return c; | ||||
| //                    }); | ||||
|  | ||||
|                 await channel.SendMessageAsync("Deck reshuffled.").ConfigureAwait(false); | ||||
|             }; | ||||
|         } | ||||
| //                await channel.SendMessageAsync("Deck reshuffled.").ConfigureAwait(false); | ||||
| //            }; | ||||
| //        } | ||||
|  | ||||
|         private Func<CommandEventArgs, Task> DrawCardFunc() => async (e) => | ||||
|         { | ||||
|             var cards = AllDecks.GetOrAdd(e.Server, (s) => new Cards()); | ||||
| //        private Func<CommandEventArgs, Task> DrawCardFunc() => async (e) => | ||||
| //        { | ||||
| //            var cards = AllDecks.GetOrAdd(e.Server, (s) => new Cards()); | ||||
|  | ||||
|             try | ||||
|             { | ||||
|                 var num = 1; | ||||
|                 var isParsed = int.TryParse(e.GetArg("count"), out num); | ||||
|                 if (!isParsed || num < 2) | ||||
|                 { | ||||
|                     var c = cards.DrawACard(); | ||||
|                     await e.Channel.SendFile(c.Name + ".jpg", (Properties.Resources.ResourceManager.GetObject(c.Name) as Image).ToStream()).ConfigureAwait(false); | ||||
|                     return; | ||||
|                 } | ||||
|                 if (num > 5) | ||||
|                     num = 5; | ||||
| //            try | ||||
| //            { | ||||
| //                var num = 1; | ||||
| //                var isParsed = int.TryParse(e.GetArg("count"), out num); | ||||
| //                if (!isParsed || num < 2) | ||||
| //                { | ||||
| //                    var c = cards.DrawACard(); | ||||
| //                    await e.Channel.SendFile(c.Name + ".jpg", (Properties.Resources.ResourceManager.GetObject(c.Name) as Image).ToStream()).ConfigureAwait(false); | ||||
| //                    return; | ||||
| //                } | ||||
| //                if (num > 5) | ||||
| //                    num = 5; | ||||
|  | ||||
|                 var images = new List<Image>(); | ||||
|                 var cardObjects = new List<Cards.Card>(); | ||||
|                 for (var i = 0; i < num; i++) | ||||
|                 { | ||||
|                     if (cards.CardPool.Count == 0 && i != 0) | ||||
|                     { | ||||
|                         await channel.SendMessageAsync("No more cards in a deck.").ConfigureAwait(false); | ||||
|                         break; | ||||
|                     } | ||||
|                     var currentCard = cards.DrawACard(); | ||||
|                     cardObjects.Add(currentCard); | ||||
|                     images.Add(Properties.Resources.ResourceManager.GetObject(currentCard.Name) as Image); | ||||
|                 } | ||||
|                 var bitmap = images.Merge(); | ||||
|                 await e.Channel.SendFile(images.Count + " cards.jpg", bitmap.ToStream()).ConfigureAwait(false); | ||||
|                 if (cardObjects.Count == 5) | ||||
|                 { | ||||
|                     await channel.SendMessageAsync($"{imsg.Author.Mention} `{Cards.GetHandValue(cardObjects)}`").ConfigureAwait(false); | ||||
|                 } | ||||
|             } | ||||
|             catch (Exception ex) | ||||
|             { | ||||
|                 Console.WriteLine("Error drawing (a) card(s) " + ex.ToString()); | ||||
|             } | ||||
|         }; | ||||
|     } | ||||
| } | ||||
| //                var images = new List<Image>(); | ||||
| //                var cardObjects = new List<Cards.Card>(); | ||||
| //                for (var i = 0; i < num; i++) | ||||
| //                { | ||||
| //                    if (cards.CardPool.Count == 0 && i != 0) | ||||
| //                    { | ||||
| //                        await channel.SendMessageAsync("No more cards in a deck.").ConfigureAwait(false); | ||||
| //                        break; | ||||
| //                    } | ||||
| //                    var currentCard = cards.DrawACard(); | ||||
| //                    cardObjects.Add(currentCard); | ||||
| //                    images.Add(Properties.Resources.ResourceManager.GetObject(currentCard.Name) as Image); | ||||
| //                } | ||||
| //                var bitmap = images.Merge(); | ||||
| //                await e.Channel.SendFile(images.Count + " cards.jpg", bitmap.ToStream()).ConfigureAwait(false); | ||||
| //                if (cardObjects.Count == 5) | ||||
| //                { | ||||
| //                    await channel.SendMessageAsync($"{imsg.Author.Mention} `{Cards.GetHandValue(cardObjects)}`").ConfigureAwait(false); | ||||
| //                } | ||||
| //            } | ||||
| //            catch (Exception ex) | ||||
| //            { | ||||
| //                Console.WriteLine("Error drawing (a) card(s) " + ex.ToString()); | ||||
| //            } | ||||
| //        }; | ||||
| //    } | ||||
| //} | ||||
|   | ||||
| @@ -1,112 +1,113 @@ | ||||
| using Discord.Commands; | ||||
| using NadekoBot.Classes; | ||||
| using NadekoBot.Extensions; | ||||
| using System; | ||||
| using System.Drawing; | ||||
| using System.Threading.Tasks; | ||||
| //using Discord.Commands; | ||||
| //using NadekoBot.Classes; | ||||
| //using NadekoBot.Extensions; | ||||
| //using System; | ||||
| //using System.Drawing; | ||||
| //using System.Threading.Tasks; | ||||
|  | ||||
| namespace NadekoBot.Modules.Gambling | ||||
| { | ||||
|     internal class FlipCoinCommand : DiscordCommand | ||||
|     { | ||||
| ////todo drawing | ||||
| //namespace NadekoBot.Modules.Gambling | ||||
| //{ | ||||
| //    internal class FlipCoinCommand : DiscordCommand | ||||
| //    { | ||||
|  | ||||
|         public FlipCoinCommand(DiscordModule module) : base(module) { } | ||||
| //        public FlipCoinCommand(DiscordModule module) : base(module) { } | ||||
|  | ||||
|         internal override void Init(CommandGroupBuilder cgb) | ||||
|         { | ||||
|             cgb.CreateCommand(Module.Prefix + "flip") | ||||
|                 .Description($"Flips coin(s) - heads or tails, and shows an image. | `{Prefix}flip` or `{Prefix}flip 3`") | ||||
|                 .Parameter("count", ParameterType.Optional) | ||||
|                 .Do(FlipCoinFunc()); | ||||
| //        internal override void Init(CommandGroupBuilder cgb) | ||||
| //        { | ||||
| //            cgb.CreateCommand(Module.Prefix + "flip") | ||||
| //                .Description($"Flips coin(s) - heads or tails, and shows an image. | `{Prefix}flip` or `{Prefix}flip 3`") | ||||
| //                .Parameter("count", ParameterType.Optional) | ||||
| //                .Do(FlipCoinFunc()); | ||||
|  | ||||
|             cgb.CreateCommand(Module.Prefix + "betflip") | ||||
|                 .Alias(Prefix+"bf") | ||||
|                 .Description($"Bet to guess will the result be heads or tails. Guessing award you double flowers you've bet. | `{Prefix}bf 5 heads` or `{Prefix}bf 3 t`") | ||||
|                 .Parameter("amount", ParameterType.Required) | ||||
|                 .Parameter("guess", ParameterType.Required) | ||||
|                 .Do(BetFlipCoinFunc()); | ||||
|         } | ||||
| //            cgb.CreateCommand(Module.Prefix + "betflip") | ||||
| //                .Alias(Prefix+"bf") | ||||
| //                .Description($"Bet to guess will the result be heads or tails. Guessing award you double flowers you've bet. | `{Prefix}bf 5 heads` or `{Prefix}bf 3 t`") | ||||
| //                .Parameter("amount", ParameterType.Required) | ||||
| //                .Parameter("guess", ParameterType.Required) | ||||
| //                .Do(BetFlipCoinFunc()); | ||||
| //        } | ||||
|  | ||||
|  | ||||
|  | ||||
|         private readonly Random rng = new Random(); | ||||
|         public Func<CommandEventArgs, Task> BetFlipCoinFunc() => async e => | ||||
|         { | ||||
| //        private readonly Random rng = new Random(); | ||||
| //        public Func<CommandEventArgs, Task> BetFlipCoinFunc() => async e => | ||||
| //        { | ||||
|  | ||||
|             var amountstr = e.GetArg("amount").Trim(); | ||||
| //            var amountstr = e.GetArg("amount").Trim(); | ||||
|  | ||||
|             var guessStr = e.GetArg("guess").Trim().ToUpperInvariant(); | ||||
|             if (guessStr != "H" && guessStr != "T" && guessStr != "HEADS" && guessStr != "TAILS") | ||||
|                 return; | ||||
| //            var guessStr = e.GetArg("guess").Trim().ToUpperInvariant(); | ||||
| //            if (guessStr != "H" && guessStr != "T" && guessStr != "HEADS" && guessStr != "TAILS") | ||||
| //                return; | ||||
|  | ||||
|             int amount; | ||||
|             if (!int.TryParse(amountstr, out amount) || amount < 1) | ||||
|                 return; | ||||
| //            int amount; | ||||
| //            if (!int.TryParse(amountstr, out amount) || amount < 1) | ||||
| //                return; | ||||
|  | ||||
|             var userFlowers = GamblingModule.GetUserFlowers(e.User.Id); | ||||
| //            var userFlowers = Gambling.GetUserFlowers(imsg.Author.Id); | ||||
|  | ||||
|             if (userFlowers < amount) | ||||
|             { | ||||
|                 await imsg.Channel.SendMessageAsync($"{e.User.Mention} You don't have enough {NadekoBot.Config.CurrencyName}s. You only have {userFlowers}{NadekoBot.Config.CurrencySign}.").ConfigureAwait(false); | ||||
|                 return; | ||||
|             } | ||||
| //            if (userFlowers < amount) | ||||
| //            { | ||||
| //                await channel.SendMessageAsync($"{imsg.Author.Mention} You don't have enough {NadekoBot.Config.CurrencyName}s. You only have {userFlowers}{NadekoBot.Config.CurrencySign}.").ConfigureAwait(false); | ||||
| //                return; | ||||
| //            } | ||||
|  | ||||
|             await FlowersHandler.RemoveFlowers(e.User, "Betflip Gamble", (int)amount, true).ConfigureAwait(false); | ||||
|             //heads = true | ||||
|             //tails = false | ||||
| //            await FlowersHandler.RemoveFlowers(imsg.Author, "Betflip Gamble", (int)amount, true).ConfigureAwait(false); | ||||
| //            //heads = true | ||||
| //            //tails = false | ||||
|  | ||||
|             var guess = guessStr == "HEADS" || guessStr == "H"; | ||||
|             bool result = false; | ||||
|             if (rng.Next(0, 2) == 1) { | ||||
|                 await e.Channel.SendFile("heads.png", Properties.Resources.heads.ToStream(System.Drawing.Imaging.ImageFormat.Png)).ConfigureAwait(false); | ||||
|                 result = true; | ||||
|             } | ||||
|             else { | ||||
|                 await e.Channel.SendFile("tails.png", Properties.Resources.tails.ToStream(System.Drawing.Imaging.ImageFormat.Png)).ConfigureAwait(false); | ||||
|             } | ||||
| //            var guess = guessStr == "HEADS" || guessStr == "H"; | ||||
| //            bool result = false; | ||||
| //            if (rng.Next(0, 2) == 1) { | ||||
| //                await e.Channel.SendFile("heads.png", Properties.Resources.heads.ToStream(System.Drawing.Imaging.ImageFormat.Png)).ConfigureAwait(false); | ||||
| //                result = true; | ||||
| //            } | ||||
| //            else { | ||||
| //                await e.Channel.SendFile("tails.png", Properties.Resources.tails.ToStream(System.Drawing.Imaging.ImageFormat.Png)).ConfigureAwait(false); | ||||
| //            } | ||||
|  | ||||
|             string str; | ||||
|             if (guess == result) | ||||
|             { | ||||
|                 str = $"{e.User.Mention}`You guessed it!` You won {amount * 2}{NadekoBot.Config.CurrencySign}"; | ||||
|                 await FlowersHandler.AddFlowersAsync(e.User, "Betflip Gamble", amount * 2, true).ConfigureAwait(false); | ||||
| //            string str; | ||||
| //            if (guess == result) | ||||
| //            { | ||||
| //                str = $"{imsg.Author.Mention}`You guessed it!` You won {amount * 2}{NadekoBot.Config.CurrencySign}"; | ||||
| //                await FlowersHandler.AddFlowersAsync(imsg.Author, "Betflip Gamble", amount * 2, true).ConfigureAwait(false); | ||||
|  | ||||
|             } | ||||
|             else | ||||
|                 str = $"{e.User.Mention}`More luck next time.`"; | ||||
| //            } | ||||
| //            else | ||||
| //                str = $"{imsg.Author.Mention}`More luck next time.`"; | ||||
|  | ||||
|             await imsg.Channel.SendMessageAsync(str).ConfigureAwait(false); | ||||
|         }; | ||||
| //            await channel.SendMessageAsync(str).ConfigureAwait(false); | ||||
| //        }; | ||||
|  | ||||
|         public Func<CommandEventArgs, Task> FlipCoinFunc() => async e => | ||||
|         { | ||||
| //        public Func<CommandEventArgs, Task> FlipCoinFunc() => async e => | ||||
| //        { | ||||
|  | ||||
|             if (e.GetArg("count") == "") | ||||
|             { | ||||
|                 if (rng.Next(0, 2) == 1) | ||||
|                     await e.Channel.SendFile("heads.png", Properties.Resources.heads.ToStream(System.Drawing.Imaging.ImageFormat.Png)).ConfigureAwait(false); | ||||
|                 else | ||||
|                     await e.Channel.SendFile("tails.png", Properties.Resources.tails.ToStream(System.Drawing.Imaging.ImageFormat.Png)).ConfigureAwait(false); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 int result; | ||||
|                 if (int.TryParse(e.GetArg("count"), out result)) | ||||
|                 { | ||||
|                     if (result > 10) | ||||
|                         result = 10; | ||||
|                     var imgs = new Image[result]; | ||||
|                     for (var i = 0; i < result; i++) | ||||
|                     { | ||||
|                         imgs[i] = rng.Next(0, 2) == 0 ? | ||||
|                                     Properties.Resources.tails : | ||||
|                                     Properties.Resources.heads; | ||||
|                     } | ||||
|                     await e.Channel.SendFile($"{result} coins.png", imgs.Merge().ToStream(System.Drawing.Imaging.ImageFormat.Png)).ConfigureAwait(false); | ||||
|                     return; | ||||
|                 } | ||||
|                 await imsg.Channel.SendMessageAsync("Invalid number").ConfigureAwait(false); | ||||
|             } | ||||
|         }; | ||||
|     } | ||||
| } | ||||
| //            if (e.GetArg("count") == "") | ||||
| //            { | ||||
| //                if (rng.Next(0, 2) == 1) | ||||
| //                    await e.Channel.SendFile("heads.png", Properties.Resources.heads.ToStream(System.Drawing.Imaging.ImageFormat.Png)).ConfigureAwait(false); | ||||
| //                else | ||||
| //                    await e.Channel.SendFile("tails.png", Properties.Resources.tails.ToStream(System.Drawing.Imaging.ImageFormat.Png)).ConfigureAwait(false); | ||||
| //            } | ||||
| //            else | ||||
| //            { | ||||
| //                int result; | ||||
| //                if (int.TryParse(e.GetArg("count"), out result)) | ||||
| //                { | ||||
| //                    if (result > 10) | ||||
| //                        result = 10; | ||||
| //                    var imgs = new Image[result]; | ||||
| //                    for (var i = 0; i < result; i++) | ||||
| //                    { | ||||
| //                        imgs[i] = rng.Next(0, 2) == 0 ? | ||||
| //                                    Properties.Resources.tails : | ||||
| //                                    Properties.Resources.heads; | ||||
| //                    } | ||||
| //                    await e.Channel.SendFile($"{result} coins.png", imgs.Merge().ToStream(System.Drawing.Imaging.ImageFormat.Png)).ConfigureAwait(false); | ||||
| //                    return; | ||||
| //                } | ||||
| //                await channel.SendMessageAsync("Invalid number").ConfigureAwait(false); | ||||
| //            } | ||||
| //        }; | ||||
| //    } | ||||
| //} | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
| using System.Collections.Generic; | ||||
| using System.Linq; | ||||
| 
 | ||||
| namespace NadekoBot.Modules.Gambling.Helpers | ||||
| namespace NadekoBot.Modules.Gambling.Commands.Models | ||||
| { | ||||
|     public class Cards | ||||
|     { | ||||
| @@ -175,6 +175,6 @@ namespace NadekoBot.Modules.Gambling | ||||
| //$@"┣━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━┫ | ||||
| //┃{(e.Server.Users.Where(u => u.Id == (ulong)cs.UserId).FirstOrDefault()?.Name.TrimTo(18, true) ?? cs.UserId.ToString()),-20} ┃ {cs.Value,5} ┃") | ||||
| //                        ).ToString() + "┗━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━┛```").ConfigureAwait(false); | ||||
|         } | ||||
|         //} | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -76,7 +76,7 @@ namespace NadekoBot.Modules.Games.Commands | ||||
|             var num = 1; | ||||
|             msgToSend = answers.Aggregate(msgToSend, (current, answ) => current + $"`{num++}.` **{answ}**\n"); | ||||
|             msgToSend += "\n**Private Message me with the corresponding number of the answer.**"; | ||||
|             await channel.SendMessageAsync(msgToSend).ConfigureAwait(false); | ||||
|             await imsg.Channel.SendMessageAsync(msgToSend).ConfigureAwait(false); | ||||
|         } | ||||
|  | ||||
|         public async Task StopPoll(IGuildChannel ch) | ||||
| @@ -91,7 +91,7 @@ namespace NadekoBot.Modules.Games.Commands | ||||
|                 var totalVotesCast = results.Sum(kvp => kvp.Value); | ||||
|                 if (totalVotesCast == 0) | ||||
|                 { | ||||
|                     await channel.SendMessageAsync("📄 **No votes have been cast.**").ConfigureAwait(false); | ||||
|                     await imsg.Channel.SendMessageAsync("📄 **No votes have been cast.**").ConfigureAwait(false); | ||||
|                     return; | ||||
|                 } | ||||
|                 var closeMessage = $"--------------**POLL CLOSED**--------------\n" + | ||||
| @@ -100,7 +100,7 @@ namespace NadekoBot.Modules.Games.Commands | ||||
|                                                                                  $" has {kvp.Value} votes." + | ||||
|                                                                                  $"({kvp.Value * 1.0f / totalVotesCast * 100}%)\n"); | ||||
|  | ||||
|                 await channel.SendMessageAsync($"📄 **Total votes cast**: {totalVotesCast}\n{closeMessage}").ConfigureAwait(false); | ||||
|                 await imsg.Channel.SendMessageAsync($"📄 **Total votes cast**: {totalVotesCast}\n{closeMessage}").ConfigureAwait(false); | ||||
|             } | ||||
|             catch (Exception ex) | ||||
|             { | ||||
|   | ||||
| @@ -1,19 +1,75 @@ | ||||
| //using Discord.Commands; | ||||
| //using NadekoBot.Classes; | ||||
| //using NadekoBot.Extensions; | ||||
| //using Newtonsoft.Json.Linq; | ||||
| //using System; | ||||
| //using System.Collections.Generic; | ||||
| //using System.Drawing; | ||||
| //using System.Linq; | ||||
| //using System.Text; | ||||
| //using System.Threading.Tasks; | ||||
| using Discord; | ||||
| using Discord.Commands; | ||||
| using NadekoBot.Attributes; | ||||
| using NadekoBot.Extensions; | ||||
| using Newtonsoft.Json.Linq; | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.Linq; | ||||
| using System.Net.Http; | ||||
| using System.Text; | ||||
| using System.Threading.Tasks; | ||||
|  | ||||
| ////todo drawing | ||||
| //namespace NadekoBot.Modules.Searches.Commands | ||||
| //{ | ||||
| //    internal class LoLCommands : DiscordCommand | ||||
| //    { | ||||
| //todo drawing | ||||
| namespace NadekoBot.Modules.Searches.Commands | ||||
| { | ||||
|     public partial class Searches | ||||
|     { | ||||
|         private class ChampionNameComparer : IEqualityComparer<JToken> | ||||
|         { | ||||
|             public bool Equals(JToken a, JToken b) => a["name"].ToString() == b["name"].ToString(); | ||||
|  | ||||
|             public int GetHashCode(JToken obj) => | ||||
|                 obj["name"].GetHashCode(); | ||||
|         } | ||||
|  | ||||
|         private string[] trashTalk { get; } = { "Better ban your counters. You are going to carry the game anyway.", | ||||
|                                                 "Go with the flow. Don't think. Just ban one of these.", | ||||
|                                                 "DONT READ BELOW! Ban Urgot mid OP 100%. Im smurf Diamond 1.", | ||||
|                                                 "Ask your teammates what would they like to play, and ban that.", | ||||
|                                                 "If you consider playing teemo, do it. If you consider teemo, you deserve him.", | ||||
|                                                 "Doesn't matter what you ban really. Enemy will ban your main and you will lose." }; | ||||
|  | ||||
|  | ||||
|         [LocalizedCommand, LocalizedDescription, LocalizedSummary] | ||||
|         [RequireContext(ContextType.Guild)] | ||||
|         public async Task Lolban(IMessage imsg) | ||||
|         { | ||||
|             var channel = imsg.Channel as ITextChannel; | ||||
|  | ||||
|  | ||||
|  | ||||
|             var showCount = 8; | ||||
|             //http://api.champion.gg/stats/champs/mostBanned?api_key=YOUR_API_TOKEN&page=1&limit=2 | ||||
|             try | ||||
|             { | ||||
|                 using (var http = new HttpClient()) | ||||
|                 { | ||||
|                     var data = JObject.Parse(await http.GetStringAsync($"http://api.champion.gg/stats/champs/mostBanned?" + | ||||
|                                                     $"api_key={NadekoBot.Credentials.LoLApiKey}&page=1&" + | ||||
|                                                     $"limit={showCount}") | ||||
|                                                     .ConfigureAwait(false))["data"] as JArray; | ||||
|                     var dataList = data.Distinct(new ChampionNameComparer()).Take(showCount).ToList(); | ||||
|                     var sb = new StringBuilder(); | ||||
|                     sb.AppendLine($"**Showing {showCount} top banned champions.**"); | ||||
|                     sb.AppendLine($"`{trashTalk[new Random().Next(0, trashTalk.Length)]}`"); | ||||
|                     for (var i = 0; i < dataList.Count; i++) | ||||
|                     { | ||||
|                         if (i % 2 == 0 && i != 0) | ||||
|                             sb.AppendLine(); | ||||
|                         sb.Append($"`{i + 1}.` **{dataList[i]["name"]}**  "); | ||||
|                     } | ||||
|  | ||||
|                     await channel.SendMessageAsync(sb.ToString()).ConfigureAwait(false); | ||||
|                 } | ||||
|             } | ||||
|             catch (Exception) | ||||
|             { | ||||
|                 await channel.SendMessageAsync($":anger: Fail: Champion.gg didsabled ban data until next patch. Sorry for the inconvenience.").ConfigureAwait(false); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| //        private class CachedChampion | ||||
| //        { | ||||
| @@ -22,14 +78,7 @@ | ||||
| //            public string Name { get; set; } | ||||
| //        } | ||||
|  | ||||
| //        private class ChampionNameComparer : IEqualityComparer<JToken> | ||||
| //        { | ||||
| //            public bool Equals(JToken a, JToken b) => a["name"].ToString() == b["name"].ToString(); | ||||
|  | ||||
| //            public int GetHashCode(JToken obj) => | ||||
| //                obj["name"].GetHashCode(); | ||||
| //        } | ||||
|  | ||||
| //         | ||||
| //        private static Dictionary<string, CachedChampion> CachedChampionImages = new Dictionary<string, CachedChampion>(); | ||||
|  | ||||
| //        private System.Timers.Timer clearTimer { get; } = new System.Timers.Timer(); | ||||
| @@ -41,21 +90,14 @@ | ||||
| //            { | ||||
| //                try | ||||
| //                { | ||||
| //                        CachedChampionImages = CachedChampionImages | ||||
| //                            .Where(kvp => DateTime.Now - kvp.Value.AddedAt > new TimeSpan(1, 0, 0)) | ||||
| //                            .ToDictionary(kvp => kvp.Key, kvp => kvp.Value); | ||||
| //                    CachedChampionImages = CachedChampionImages | ||||
| //                        .Where(kvp => DateTime.Now - kvp.Value.AddedAt > new TimeSpan(1, 0, 0)) | ||||
| //                        .ToDictionary(kvp => kvp.Key, kvp => kvp.Value); | ||||
| //                } | ||||
| //                catch { } | ||||
| //            }; | ||||
| //        } | ||||
|  | ||||
| //        private readonly string[] trashTalk = { "Better ban your counters. You are going to carry the game anyway.", | ||||
| //                                                "Go with the flow. Don't think. Just ban one of these.", | ||||
| //                                                "DONT READ BELOW! Ban Urgot mid OP 100%. Im smurf Diamond 1.", | ||||
| //                                                "Ask your teammates what would they like to play, and ban that.", | ||||
| //                                                "If you consider playing teemo, do it. If you consider teemo, you deserve him.", | ||||
| //                                                "Doesn't matter what you ban really. Enemy will ban your main and you will lose." }; | ||||
|  | ||||
| //        public Func<CommandEventArgs, Task> DoFunc() | ||||
| //        { | ||||
| //            throw new NotImplementedException(); | ||||
| @@ -86,7 +128,7 @@ | ||||
| //                          var name = e.GetArg("champ").Replace(" ", "").ToLower(); | ||||
| //                          CachedChampion champ = null; | ||||
|  | ||||
| //                          if(CachedChampionImages.TryGetValue(name + "_" + resolvedRole, out champ)) | ||||
| //                          if (CachedChampionImages.TryGetValue(name + "_" + resolvedRole, out champ)) | ||||
| //                              if (champ != null) | ||||
| //                              { | ||||
| //                                  champ.ImageStream.Position = 0; | ||||
| @@ -117,7 +159,7 @@ | ||||
| //                              role = allData[0]["role"].ToString(); | ||||
| //                              resolvedRole = ResolvePos(role); | ||||
| //                          } | ||||
| //                          if(CachedChampionImages.TryGetValue(name + "_" + resolvedRole, out champ)) | ||||
| //                          if (CachedChampionImages.TryGetValue(name + "_" + resolvedRole, out champ)) | ||||
| //                              if (champ != null) | ||||
| //                              { | ||||
| //                                  champ.ImageStream.Position = 0; | ||||
| @@ -279,42 +321,6 @@ | ||||
| //                          await channel.SendMessageAsync("💢 Failed retreiving data for that champion.").ConfigureAwait(false); | ||||
| //                      } | ||||
| //                  }); | ||||
|  | ||||
| //            cgb.CreateCommand(Module.Prefix + "lolban") | ||||
| //                  .Description($"Shows top 6 banned champions ordered by ban rate. Ban these champions and you will be Plat 5 in no time. | `{Prefix}lolban`") | ||||
| //                  .Do(async e => | ||||
| //                  { | ||||
|  | ||||
| //                      var showCount = 8; | ||||
| //                      //http://api.champion.gg/stats/champs/mostBanned?api_key=YOUR_API_TOKEN&page=1&limit=2 | ||||
| //                      try | ||||
| //                      { | ||||
| //                          var data = JObject.Parse( | ||||
| //                              await Classes | ||||
| //                                  .SearchHelper | ||||
| //                                  .GetResponseStringAsync($"http://api.champion.gg/stats/champs/mostBanned?" + | ||||
| //                                                          $"api_key={NadekoBot.Creds.LOLAPIKey}&page=1&" + | ||||
| //                                                          $"limit={showCount}") | ||||
| //                                                          .ConfigureAwait(false))["data"] as JArray; | ||||
| //                          var dataList = data.Distinct(new ChampionNameComparer()).Take(showCount).ToList(); | ||||
| //                          var sb = new StringBuilder(); | ||||
| //                          sb.AppendLine($"**Showing {showCount} top banned champions.**"); | ||||
| //                          sb.AppendLine($"`{trashTalk[new Random().Next(0, trashTalk.Length)]}`"); | ||||
| //                          for (var i = 0; i < dataList.Count; i++) | ||||
| //                          { | ||||
| //                              if (i % 2 == 0 && i != 0) | ||||
| //                                  sb.AppendLine(); | ||||
| //                              sb.Append($"`{i + 1}.` **{dataList[i]["name"]}**  "); | ||||
| //                              //sb.AppendLine($" ({dataList[i]["general"]["banRate"]}%)"); | ||||
| //                          } | ||||
|  | ||||
| //                          await channel.SendMessageAsync(sb.ToString()).ConfigureAwait(false); | ||||
| //                      } | ||||
| //                      catch (Exception) | ||||
| //                      { | ||||
| //                          await channel.SendMessageAsync($":anger: Fail: Champion.gg didsabled ban data until next patch. Sorry for the inconvenience.").ConfigureAwait(false); | ||||
| //                      } | ||||
| //                  }); | ||||
| //        } | ||||
|  | ||||
| //        private enum GetImageType | ||||
|   | ||||
| @@ -1,4 +1,5 @@ | ||||
| using Discord; | ||||
| using System.Collections.Generic; | ||||
| using System.Linq; | ||||
|  | ||||
| namespace NadekoBot.Services | ||||
| @@ -9,7 +10,8 @@ namespace NadekoBot.Services | ||||
|         string Token { get; } | ||||
|         string GoogleApiKey { get; } | ||||
|         ulong[] OwnerIds { get; } | ||||
|  | ||||
|         IEnumerable<string> MashapeKey { get; } | ||||
|         string LoLApiKey { get; } | ||||
|  | ||||
|         bool IsOwner(IUser u); | ||||
|     } | ||||
|   | ||||
| @@ -20,16 +20,20 @@ namespace NadekoBot.Services.Impl | ||||
|  | ||||
|         public ulong[] OwnerIds { get; } | ||||
|  | ||||
|         public string LoLApiKey { get; } | ||||
|  | ||||
|         public BotCredentials() | ||||
|         { | ||||
|             var cm = JsonConvert.DeserializeObject<CredentialsModel>(File.ReadAllText("./credentials.json")); | ||||
|             Token = cm.Token; | ||||
|             OwnerIds = cm.OwnerIds; | ||||
|             LoLApiKey = cm.LoLApiKey; | ||||
|         } | ||||
|  | ||||
|         private class CredentialsModel { | ||||
|             public string Token { get; set; } | ||||
|             public ulong[] OwnerIds { get; set; } | ||||
|             public string LoLApiKey { get; set; } | ||||
|         } | ||||
|  | ||||
|         public bool IsOwner(IUser u) => OwnerIds.Contains(u.Id); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user