Example #1
0
        /// <summary>
        /// The program runs all discord services and loads all the data here.
        /// </summary>
        public void LoadDiscord()
        {
            bot = new Bot(x =>
            {
                x.Name            = "Miki";
                x.Version         = "0.3.71";
                x.Token           = Global.ApiKey;
                x.ShardCount      = Global.shardCount;
                x.ConsoleLogLevel = LogLevel.ALL;
            });

            bot.Events.OnCommandError = async(ex, cmd, msg) =>
            {
                RuntimeEmbed e = new RuntimeEmbed();
                e.Title = Locale.GetEntity(0).GetString(Locale.ErrorMessageGeneric);
                e.Color = new IA.SDK.Color(1, 0.4f, 0.6f);

                if (Notification.CanSendNotification(msg.Author.Id, DatabaseEntityType.USER, DatabaseSettingId.ERRORMESSAGE))
                {
                    e.Description = "Miki has encountered a problem in her code with your request. We will send you a log and instructions through PM.";

                    await msg.Channel.SendMessage(e);

                    e.Title       = $"You used the '{cmd.Name}' and it crashed!";
                    e.Description = "Please screenshot this message and send it to the miki issue page (https://github.com/velddev/miki/issues)";
                    e.AddField(f =>
                    {
                        f.Name     = "Error Message";
                        f.Value    = ex.Message;
                        f.IsInline = true;
                    });

                    e.AddField(f =>
                    {
                        f.Name     = "Error Log";
                        f.Value    = "```" + ex.StackTrace + "```";
                        f.IsInline = true;
                    });

                    e.CreateFooter();
                    e.Footer.Text = "Did you not want this message? use `>toggleerrors` to disable it!";

                    await msg.Author.SendMessage(e);

                    return;
                }
                e.Description = "... but you've disabled error messages, so we won't send you a PM :)";
                await msg.Channel.SendMessage(e);
            };

            bot.AddDeveloper(121919449996460033);

            if (!string.IsNullOrEmpty(devId))
            {
                bot.AddDeveloper(ulong.Parse(devId));
            }

            bot.Client.JoinedGuild += Client_JoinedGuild;
        }
Example #2
0
        private AccountManager(Bot bot)
        {
            this.bot = bot;

            OnLocalLevelUp += async(a, e, l) =>
            {
                Locale locale = Locale.GetEntity(e.Id.ToDbLong());

                int randomNumber  = Global.random.Next(0, 10);
                int currencyAdded = (l * 10 + randomNumber);

                IDiscordEmbed embed = new RuntimeEmbed(new EmbedBuilder());
                embed.Title       = locale.GetString("miki_accounts_level_up_header");
                embed.Description = locale.GetString("miki_accounts_level_up_content", a.Name, l);
                embed.AddField(x => { x.Name = locale.GetString("miki_generic_reward"); x.Value = "🔸" + currencyAdded.ToString(); });
                embed.Color = new IA.SDK.Color(1, 0.7f, 0.2f);
                await Notification.SendChannel(e, embed);

                using (var context = new MikiContext())
                {
                    User user = await context.Users.FindAsync(a.Id);

                    user.AddCurrency(context, null, currencyAdded);
                    await context.SaveChangesAsync();
                }
            };

            Bot.instance.Client.GuildUpdated += Client_GuildUpdated;
            Bot.instance.Client.UserJoined   += Client_UserJoined;
            Bot.instance.Client.UserLeft     += Client_UserLeft;
        }
Example #3
0
        private AccountManager(Bot bot)
        {
            this.bot = bot;

            OnLocalLevelUp += async(a, e, l) =>
            {
                long             guildId       = e.Guild.Id.ToDbLong();
                Locale           locale        = Locale.GetEntity(e.Id.ToDbLong());
                List <LevelRole> rolesObtained = new List <LevelRole>();

                int randomNumber  = MikiRandom.Next(0, 10);
                int currencyAdded = (l * 10 + randomNumber);

                using (var context = new MikiContext())
                {
                    User user = await context.Users.FindAsync(a.Id);

                    if (user != null)
                    {
                        await user.AddCurrencyAsync(currencyAdded, e);

                        await context.SaveChangesAsync();
                    }
                    else
                    {
                        Log.Warning("User levelled up was null.");
                    }

                    rolesObtained = context.LevelRoles.AsNoTracking()
                                    .Where(p => p.GuildId == guildId && p.RequiredLevel == l)
                                    .ToList();
                }

                List <string> allRolesAdded = new List <string>();

                foreach (IDiscordRole role in rolesObtained)
                {
                    allRolesAdded.Add("Role: " + role.Name);
                }

                IDiscordEmbed embed = new RuntimeEmbed(new EmbedBuilder())
                {
                    Title       = locale.GetString("miki_accounts_level_up_header"),
                    Description = locale.GetString("miki_accounts_level_up_content", a.Name, l),
                    Color       = new IA.SDK.Color(1, 0.7f, 0.2f)
                };

                embed.AddField(locale.GetString("miki_generic_reward"), "🔸" + currencyAdded.ToString() + "\n" + string.Join("\n", allRolesAdded));
                await Notification.SendChannel(e, embed);
            };

            Bot.instance.Client.GuildUpdated += Client_GuildUpdated;
            Bot.instance.Client.UserJoined   += Client_UserJoined;
            Bot.instance.Client.UserLeft     += Client_UserLeft;
        }
Example #4
0
        public async Task BuyMarriageSlotAsync(EventContext e)
        {
            using (var context = new MikiContext())
            {
                User user = await context.Users.FindAsync(e.Author.Id.ToDbLong());

                int  limit     = 10;
                bool isDonator = await user.IsDonatorAsync(context);

                if (isDonator)
                {
                    limit += 5;
                }

                IDiscordEmbed embed = new RuntimeEmbed(new EmbedBuilder());

                if (user.MarriageSlots >= limit)
                {
                    embed.Description = $"For now, **{limit} slots** is the max. sorry :(";

                    if (limit == 10 && !isDonator)
                    {
                        embed.AddField("Pro tip!", "Donators get 5 more slots!")
                        .SetFooter("Check `>donate` for more information!", "");
                    }

                    embed.Color = new Common.Color(1f, 0.6f, 0.4f);
                    embed.QueueToChannel(e.Channel);
                    return;
                }

                int costForUpgrade = (user.MarriageSlots - 4) * 2500;

                embed.Description = $"Do you want to buy a Marriage slot for **{costForUpgrade}**?\n\nType `yes` to confirm.";
                embed.Color       = new Miki.Common.Color(0.4f, 0.6f, 1f);
                embed.QueueToChannel(e.Channel);

                CommandHandler c = new CommandHandlerBuilder(EventSystem.Instance)
                                   .AddPrefix("")
                                   .DisposeInSeconds(20)
                                   .SetOwner(e.message)
                                   .AddCommand(
                    new RuntimeCommandEvent("yes")
                    .Default(async(cont) =>
                {
                    await ConfirmBuyMarriageSlot(cont, costForUpgrade);
                }))
                                   .Build();

                EventSystem.Instance.AddPrivateCommandHandler(e.message, c);
            }
        }
Example #5
0
        public async Task <IDiscordEmbed> ListCommandsInEmbedAsync(IDiscordMessage e)
        {
            SortedDictionary <string, List <string> > moduleEvents = await GetEventNamesAsync(e);

            IDiscordEmbed embed = new RuntimeEmbed(new Discord.EmbedBuilder());

            foreach (KeyValuePair <string, List <string> > items in moduleEvents)
            {
                for (int i = 0; i < items.Value.Count; i++)
                {
                    items.Value[i] = $"`{items.Value[i]}`";
                }

                embed.AddField(items.Key, string.Join(", ", items.Value));
            }
            return(embed);
        }
Example #6
0
        public async Task <IDiscordEmbed> ListCommandsInEmbed(IDiscordMessage e)
        {
            SortedDictionary <string, List <string> > moduleEvents = await GetEventNames(e);

            IDiscordEmbed embed = new RuntimeEmbed(new Discord.EmbedBuilder());

            foreach (KeyValuePair <string, List <string> > items in moduleEvents)
            {
                embed.AddField(f =>
                {
                    f.Name     = items.Key;
                    f.Value    = "```" + string.Join(", ", items.Value) + "```";
                    f.IsInline = true;
                });
            }
            return(embed);
        }
Example #7
0
        private AccountManager(Bot bot)
        {
            this.bot = bot;

            OnLocalLevelUp += async(a, e, l) =>
            {
                Locale locale = Locale.GetEntity(e.Id.ToDbLong());

                int randomNumber  = MikiRandom.Next(0, 10);
                int currencyAdded = (l * 10 + randomNumber);

                using (var context = new MikiContext())
                {
                    User user = await context.Users.FindAsync(a.Id);

                    if (user != null)
                    {
                        await user.AddCurrencyAsync(currencyAdded, e);

                        await context.SaveChangesAsync();
                    }
                    else
                    {
                        Log.Warning("User levelled up was null.");
                    }
                }

                IDiscordEmbed embed = new RuntimeEmbed(new EmbedBuilder())
                {
                    Title       = locale.GetString("miki_accounts_level_up_header"),
                    Description = locale.GetString("miki_accounts_level_up_content", a.Name, l),
                    Color       = new IA.SDK.Color(1, 0.7f, 0.2f)
                };

                embed.AddField(locale.GetString("miki_generic_reward"), "🔸" + currencyAdded.ToString());
                await Notification.SendChannel(e, embed);
            };

            Bot.instance.Client.GuildUpdated += Client_GuildUpdated;
            Bot.instance.Client.UserJoined   += Client_UserJoined;
            Bot.instance.Client.UserLeft     += Client_UserLeft;
        }