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