/// <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; }
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; }
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; }
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); } }
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); }
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); }
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; }