示例#1
0
        public async Task Execute(SocketUserMessage userMessage, int argsPos)
        {
            var context  = new SocketCommandContext(_client, userMessage);
            var roleName = _config.RussianRoulette.WinnerRoleName ?? DefaultRouletteRole;
            var userId   = userMessage.Author.Id;
            var role     = context.Guild.Roles.FirstOrDefault(r => r.Name.Equals(roleName, StringComparison.OrdinalIgnoreCase));

            if (role == null || role.Permissions.SendMessages)
            {
                await userMessage.DeleteAsync();

                return;
            }

            var cooldown = await _rouletteStore.UserRouletteCooldown(context.Guild.Id, userId);

            if (cooldown > TimeSpan.Zero)
            {
                var phrase = CooldownPhrases[_rng.Next(CooldownPhrases.Length)] + cooldown.FormatForMessage();
                var reply  = await userMessage.Channel.SendMessageAsync(phrase);

                await MessageUtilities.DeleteMessagesAsync(5, reply, userMessage);

                return;
            }

            var(wins, loses) = await _rouletteStore.GetUserStat(context.Guild.Id, userId);

            var now          = DateTime.Now;
            var isAprilFools = now.Day == 1 && now.Month == 4;
            var isFirstTime  = wins + loses == 0;
            var isDeveloper  = _botDeveloperProvider.IsUserDeveloper(userId);
            var value        = _rng.GetRouletteNumber(isFirstTime, isDeveloper, isAprilFools);

            var text = await GetText(context, userMessage, value, isAprilFools, role);

            await _rouletteStore.SetUserRouletteCooldown(context.Guild.Id, userMessage.Author.Id);

            await userMessage.Channel.SendMessageAsync(text);
        }