コード例 #1
0
ファイル: LevelingUser.cs プロジェクト: Mrcarrot1/CarrotBot
 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();
     }
 }
コード例 #2
0
        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);
        }
コード例 #3
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);
        }