public async Task HandleMessage(DiscordMessage msg) { messageInterval = new TimeSpan(0, 0, Server.XPCooldown); if (msg.Content.StartsWith(Data.Database.GetOrCreateGuildData((ulong)msg.Channel.GuildId).GuildPrefix)) { return; } if (DateTimeOffset.Now - LastMessageTimestamp > messageInterval) { if (msg.Channel.Guild.Id == 824824193001979924) { if (Dripcoin.UserBalances.ContainsKey(msg.Author.Id)) { Dripcoin.AddBalance(msg.Author.Id, 1); } else { Dripcoin.CreateUser(msg.Author.Id); Dripcoin.AddBalance(msg.Author.Id, 1); } } CurrentXP += Server.GetMessageXP(); while (CurrentXP >= Server.XPNeededForLevel(Level + 1)) { Level++; CurrentXP -= Server.XPNeededForLevel(Level); DiscordEmbedBuilder eb = new DiscordEmbedBuilder { Description = $"Congratulations <@{msg.Author.Id}> !\nYou have advanced to level **{Level}**!", Title = "Level Up", Color = Utils.CBOrange }; if (Server.RoleRewards.ContainsKey(Level)) { eb.Description += $"\nYou have unlocked the <@&{Server.RoleRewards[Level]}> role!"; await msg.Channel.Guild.GetMemberAsync(msg.Author.Id).Result.GrantRoleAsync(msg.Channel.Guild.GetRole(Server.RoleRewards[Level])); } if (Server.LevelUpMessages.ContainsKey(Level)) { eb.Description += $"\n{Server.LevelUpMessages[Level]}"; } Server.SortUsersByRank(); string content = MentionForLevelUp ? $"<@!{msg.Author.Id}>" : null; if (Server.LevelUpChannel == null) { await msg.RespondAsync(content, eb.Build()); } else { await msg.Channel.Guild.Channels[(ulong)Server.LevelUpChannel].SendMessageAsync(content, eb.Build()); } } LastMessageTimestamp = DateTimeOffset.Now; FlushData(); } }
public async Task Shutdown(CommandContext ctx, bool dontRestart = false) { if (ctx.User.Id != 366298290377195522 && ctx.User.Id != 374283134243700747 && ctx.User.Id != 129329809741447168 && ctx.User.Id != 245703456382386177) { return; } if (dontRestart) { File.WriteAllText($@"{Utils.localDataPath}/DO_NOT_START.cb", "DO_NOT_START"); } await ctx.RespondAsync("CarrotBot shutting down. Good night!"); Database.FlushDatabase(true); Leveling.LevelingData.FlushAllData(); Dripcoin.WriteData(); Conversation.ConversationData.WriteDatabase(); Logger.Log($"Bot shutdown initiated by {ctx.User.Username}#{ctx.User.Discriminator}."); Console.WriteLine(); Environment.Exit(0); }
static async Task MainAsync(string[] args) { //Check for do not start flag in the form of a file- //The beta ignores this. if (File.Exists($@"{Utils.localDataPath}/DO_NOT_START.cb") && !isBeta) { Logger.Log("Do not start flag detected. Exiting."); Environment.Exit(0); } //Check to see if it's the beta, and set these values accordingly //I know I'll probably forget how this operator works at some point //So it's worth explaining the code string token = isBeta ? SensitiveInformation.betaToken : SensitiveInformation.botToken; Console.Title = isBeta ? "CarrotBot Beta" : "CarrotBot"; commandPrefix = isBeta ? "b%" : "%"; discord = new DiscordShardedClient(new DiscordConfiguration { Token = token, TokenType = TokenType.Bot, MinimumLogLevel = isBeta ? Microsoft.Extensions.Logging.LogLevel.Debug : Microsoft.Extensions.Logging.LogLevel.Information, Intents = DiscordIntents.AllUnprivileged | DiscordIntents.GuildMembers, LoggerFactory = LoggerFactory.Create(builder => builder.AddProvider(new CBLoggerProvider())) }); Database.Load(); if (!isBeta) { Dripcoin.LoadData(); } discord.MessageCreated += CommandHandler; discord.MessageCreated += (s, e) => { _ = Task.Run(async() => { await MainMessageHandler(s, e); }); return(Task.CompletedTask); }; discord.Ready += (s, e) => { _ = Task.Run(async() => { await ReadyHandler(s, e); }); return(Task.CompletedTask); }; discord.MessageUpdated += MessageUpdated; discord.MessageDeleted += MessageDeleted; discord.GuildMemberAdded += MemberJoined; discord.GuildDeleted += GuildRemoved; discord.ClientErrored += HandleClientError; await discord.StartAsync(); List <string> stringPrefixes = new List <string>(); stringPrefixes.Add(commandPrefix); if (!isBeta) { stringPrefixes.Add("cb%"); } await discord.UseCommandsNextAsync(new CommandsNextConfiguration { StringPrefixes = stringPrefixes, EnableDefaultHelp = false, UseDefaultCommandHandler = false }); foreach (var commands in discord.GetCommandsNextAsync().Result) { commands.Value.RegisterCommands <Commands.UngroupedCommands>(); commands.Value.RegisterCommands <Commands.AdminCommands>(); commands.Value.RegisterCommands <Commands.BotCommands>(); commands.Value.RegisterCommands <Commands.MathCommands>(); commands.Value.RegisterCommands <Commands.ServerCommands>(); commands.Value.RegisterCommands <Commands.UserCommands>(); commands.Value.RegisterCommands <Leveling.LevelingCommands>(); commands.Value.RegisterCommands <Conversation.ConversationCommands>(); } discord.GetShard(824824193001979924).GetCommandsNext().RegisterCommands <DripcoinCommands>(); //await discord.UseSlashCommandsAsync(); await Task.Delay(-1); }