Exemple #1
0
        public AccountManager(Framework.Bot bot)
        {
            OnGlobalLevelUp += (a, e, l) =>
            {
                DogStatsd.Counter("levels.global", l);
                return(Task.CompletedTask);
            };
            OnLocalLevelUp += async(a, e, l) =>
            {
                DogStatsd.Counter("levels.local", l);

                long guildId = (e as IDiscordGuildChannel).GuildId.ToDbLong();

                List <LevelRole> rolesObtained = new List <LevelRole>();

                using (var context = new MikiContext())
                {
                    rolesObtained = await context.LevelRoles
                                    .Where(p => p.GuildId == guildId && p.RequiredLevel == l && p.Automatic)
                                    .ToListAsync();

                    // await (a as IDiscordGuildUser).AddRolesAsync(rolesObtained.Select(x => x.Role).ToArray());

                    var setting = (LevelNotificationsSetting)await Setting.GetAsync(context, e.Id, DatabaseSettingId.LEVEL_NOTIFICATIONS);

                    if (setting == LevelNotificationsSetting.NONE)
                    {
                        return;
                    }

                    if (setting == LevelNotificationsSetting.REWARDS_ONLY && rolesObtained.Count == 0)
                    {
                        return;
                    }

                    LocaleInstance instance = await Locale.GetLanguageInstanceAsync(e.Id);

                    EmbedBuilder embed = new EmbedBuilder()
                    {
                        Title       = instance.GetString("miki_accounts_level_up_header"),
                        Description = instance.GetString("miki_accounts_level_up_content", $"{a.Username}#{a.Discriminator}", l),
                        Color       = new Color(1, 0.7f, 0.2f)
                    };

                    if (rolesObtained.Count > 0)
                    {
                        embed.AddInlineField("Rewards", string.Join("\n", rolesObtained.Select(x => $"New Role: **{x.GetRoleAsync().Result.Name}**")));
                    }

                    embed.ToEmbed().QueueToChannel(e);
                }
            };

            //	bot.Client.GuildUpdated += Client_GuildUpdated;
            //bot.Client.JoinedGuild   += Client_UserJoined;
            //bot.Client.LeftGuild  += Client_UserLeft;
            bot.Client.MessageCreate += CheckAsync;
        }
Exemple #2
0
        private async Task Client_JoinedGuild(IDiscordGuild arg)
        {
            using (var scope = MikiApp.Instance.Services.CreateScope())
            {
                var context = scope.ServiceProvider.GetService <DbContext>();

                IDiscordChannel defaultChannel = await arg.GetDefaultChannelAsync();

                if (defaultChannel != null)
                {
                    LocaleInstance i = await Locale.GetLanguageInstanceAsync(context, defaultChannel.Id);

                    (defaultChannel as IDiscordTextChannel).QueueMessage(i.GetString("miki_join_message"));
                }

                List <string> allArgs      = new List <string>();
                List <object> allParams    = new List <object>();
                List <object> allExpParams = new List <object>();

                try
                {
                    var members = await arg.GetMembersAsync();

                    for (int i = 0; i < members.Length; i++)
                    {
                        allArgs.Add($"(@p{i * 2}, @p{i * 2 + 1})");

                        allParams.Add(members.ElementAt(i).Id.ToDbLong());
                        allParams.Add(members.ElementAt(i).Username);

                        allExpParams.Add(arg.Id.ToDbLong());
                        allExpParams.Add(members.ElementAt(i).Id.ToDbLong());
                    }

                    await context.Database.ExecuteSqlCommandAsync(
                        $"INSERT INTO dbo.\"Users\" (\"Id\", \"Name\") VALUES {string.Join(",", allArgs)} ON CONFLICT DO NOTHING", allParams);

                    await context.Database.ExecuteSqlCommandAsync(
                        $"INSERT INTO dbo.\"LocalExperience\" (\"ServerId\", \"UserId\") VALUES {string.Join(",", allArgs)} ON CONFLICT DO NOTHING", allExpParams);

                    await context.SaveChangesAsync();
                }
                catch (Exception e)
                {
                    Log.Error(e.ToString());
                }

                DogStatsd.Increment("guilds.joined");
            }
        }
Exemple #3
0
        private async Task Client_JoinedGuild(IDiscordGuild arg)
        {
            IDiscordChannel defaultChannel = await arg.GetDefaultChannelAsync();

            if (defaultChannel != null)
            {
                using (var context = new MikiContext())
                {
                    LocaleInstance i = await Locale.GetLanguageInstanceAsync(context, defaultChannel.Id);

                    (defaultChannel as IDiscordTextChannel).QueueMessage(i.GetString("miki_join_message"));
                }
            }

            //List<string> allArgs = new List<string>();
            //List<object> allParams = new List<object>();
            //List<object> allExpParams = new List<object>();

            //try
            //{
            //	for (int i = 0; i < arg.Members.Count; i++)
            //	{
            //		allArgs.Add($"(@p{i * 2}, @p{i * 2 + 1})");

            //		allParams.Add(arg.Members.ElementAt(i).Id.ToDbLong());
            //		allParams.Add(arg.Members.ElementAt(i).Username);

            //		allExpParams.Add(arg.Id.ToDbLong());
            //		allExpParams.Add(arg.Members.ElementAt(i).Id.ToDbLong());
            //	}

            //	using (var context = new MikiContext())
            //	{
            //		await context.Database.ExecuteSqlCommandAsync(
            //			$"INSERT INTO dbo.\"Users\" (\"Id\", \"Name\") VALUES {string.Join(",", allArgs)} ON CONFLICT DO NOTHING", allParams);

            //		await context.Database.ExecuteSqlCommandAsync(
            //			$"INSERT INTO dbo.\"LocalExperience\" (\"ServerId\", \"UserId\") VALUES {string.Join(",", allArgs)} ON CONFLICT DO NOTHING", allExpParams);

            //		await context.SaveChangesAsync();
            //	}
            //}
            //catch (Exception e)
            //{
            //	Log.Error(e.ToString());
            //}

            DogStatsd.Increment("guilds.joined");
        }
Exemple #4
0
        public static string ToTimeString(this TimeSpan time, LocaleInstance instance, bool minified = false)
        {
            List <TimeValue> t = new List <TimeValue>();

            if (Math.Floor(time.TotalDays) > 0)
            {
                if (Math.Floor(time.TotalDays) > 1)
                {
                    t.Add(new TimeValue(instance.GetString("time_days"), time.Days, minified));
                }
                else
                {
                    t.Add(new TimeValue(instance.GetString("time_days"), time.Days, minified));
                }
            }
            if (time.Hours > 0)
            {
                if (time.Hours > 1)
                {
                    t.Add(new TimeValue(instance.GetString("time_hours"), time.Hours, minified));
                }
                else
                {
                    t.Add(new TimeValue(instance.GetString("time_hour"), time.Hours, minified));
                }
            }
            if (time.Minutes > 0)
            {
                if (time.Minutes > 1)
                {
                    t.Add(new TimeValue(instance.GetString("time_minutes"), time.Minutes, minified));
                }
                else
                {
                    t.Add(new TimeValue(instance.GetString("time_minute"), time.Minutes, minified));
                }
            }

            if (t.Count == 0 || time.Seconds > 0)
            {
                if (time.Seconds > 1)
                {
                    t.Add(new TimeValue(instance.GetString("time_seconds"), time.Seconds, minified));
                }
                else
                {
                    t.Add(new TimeValue(instance.GetString("time_second"), time.Seconds, minified));
                }
            }

            if (t.Count != 0)
            {
                List <string> s = new List <string>();
                foreach (TimeValue v in t)
                {
                    s.Add(v.ToString());
                }

                string text = "";
                if (t.Count > 1)
                {
                    int offset = 1;
                    if (minified)
                    {
                        offset = 0;
                    }
                    text = string.Join(", ", s.ToArray(), 0, s.Count - offset);

                    if (!minified)
                    {
                        text += $", {instance.GetString("time_and")} " + s[s.Count - 1].ToString();
                    }
                }
                else if (t.Count == 1)
                {
                    text = s[0].ToString();
                }

                return(text);
            }
            return("");
        }
Exemple #5
0
 public string Get(LocaleInstance instance)
 {
     return(_content);
 }
Exemple #6
0
 public string Get(LocaleInstance instance)
 => _icon + " " + instance.GetString(_resourceText);
        public AccountManager(MikiApp bot)
        {
            OnGlobalLevelUp += (a, e, l) =>
            {
                DogStatsd.Counter("levels.global", l, 1, new [] {
                    $"level:{l}"
                });
                return(Task.CompletedTask);
            };

            OnLocalLevelUp += async(a, e, l) =>
            {
                DogStatsd.Counter("levels.local", l, 1, new[] {
                    $"level:{l}"
                });

                var  guild   = await(e as IDiscordGuildChannel).GetGuildAsync();
                long guildId = guild.Id.ToDbLong();

                List <LevelRole> rolesObtained = new List <LevelRole>();

                using (var scope = MikiApp.Instance.Services.CreateScope())
                {
                    var context = scope.ServiceProvider.GetService <MikiDbContext>();
                    rolesObtained = await context.LevelRoles
                                    .Where(p => p.GuildId == guildId && p.RequiredLevel == l && p.Automatic)
                                    .ToListAsync();

                    var setting = (LevelNotificationsSetting)await Setting
                                  .GetAsync(context, e.Id, DatabaseSettingId.LevelUps);

                    if (setting == LevelNotificationsSetting.None)
                    {
                        return;
                    }

                    if (setting == LevelNotificationsSetting.RewardsOnly && rolesObtained.Count == 0)
                    {
                        return;
                    }

                    LocaleInstance instance = await Locale.GetLanguageInstanceAsync(context, e.Id);

                    EmbedBuilder embed = new EmbedBuilder()
                    {
                        Title       = instance.GetString("miki_accounts_level_up_header"),
                        Description = instance.GetString("miki_accounts_level_up_content", $"{a.Username}#{a.Discriminator}", l),
                        Color       = new Color(1, 0.7f, 0.2f)
                    };

                    if (rolesObtained.Count > 0)
                    {
                        var roles = await guild.GetRolesAsync();

                        var guildUser = await guild.GetMemberAsync(a.Id);

                        if (guildUser != null)
                        {
                            foreach (var role in rolesObtained)
                            {
                                var r = roles.FirstOrDefault(x => x.Id == (ulong)role.RoleId);

                                if (r != null)
                                {
                                    await guildUser.AddRoleAsync(r);
                                }
                            }
                        }

                        embed.AddInlineField("Rewards",
                                             string.Join("\n", rolesObtained.Select(x => $"New Role: **{roles.FirstOrDefault(z => z.Id.ToDbLong() == x.RoleId).Name}**")));
                    }

                    if (e is IDiscordTextChannel tc)
                    {
                        await embed.ToEmbed().QueueToChannelAsync(tc);
                    }
                }
            };

            //bot.Discord.Update += Client_GuildUpdated;
            bot.Discord.GuildMemberCreate += Client_UserJoined;
            bot.Discord.MessageCreate     += CheckAsync;
        }