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; }
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"); } }
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"); }
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(""); }
public string Get(LocaleInstance instance) { return(_content); }
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; }