void FillWhisperCommands() { whisperCommands.Add("average", new Command((args) => { if (args.isBroadcaster || args.isOwner) { int count = 0; long value = 0; long time = 0; int minimumTime = 240; foreach (var u in bot.coinSystem.userStats) { if (u.Value.time >= minimumTime) { count++; value += u.Value.coins; time += u.Value.time; } } value /= count; time /= count; TimeSpan timeSpan = TimeSpan.FromMinutes(time); bot.SendWhisper(args.Caller, $"The average user has {value} coins and spent {timeSpan.Hours}h {timeSpan.Minutes}m in chat. Stats based on {count} users"); } return(Task.Run(() => { return 0; })); })); whisperCommands.Add("top", new Command(async(args) => { int count = 10; if (args.Arguments.Count > 0) { if (!int.TryParse(args.Arguments[0], out count)) { count = 10; } } var topX = bot.coinSystem.userStats.ToList(); topX.Sort((x, y) => { return(y.Value.coins - x.Value.coins); }); string msg = ""; for (int i = 0; i < count; i++) { msg += $"{topX[i].Key}: {topX[i].Value.coins}\n"; } var paste = await bot.PasteOnPasteBin(msg, $"Top {count}"); bot.SendWhisperRaw(args.Caller, paste); return(3); })); whisperCommands.Add("transfer", new Command((args) => { if (args.isOwner || args.isBroadcaster) { if (args.Arguments.Count >= 2) { if (bot.coinSystem.CheckKey(args.Arguments[0]) && bot.coinSystem.CheckKey(args.Arguments[1])) { bot.coinSystem.userStats[args.Arguments[1].ToLower()] += bot.coinSystem.userStats[args.Arguments[0].ToLower()]; bot.coinSystem.userStats.Remove(args.Arguments[0].ToLower()); bot.SendWhisper(args.Caller, $"Successfully moved {args.Arguments[0]}'s stats over to {args.Arguments[1]} and removed the former from the base"); } else { bot.SendWhisper(args.Caller, $"One or more arguments weren't present in the database"); } return(Task.Run(() => { return 0; })); } else { return(Task.Run(() => { return 0; })); } } else { return(Task.Run(() => { return 0; })); } })); whisperCommands.Add("morethan", new Command((args) => { if (args.Arguments.Count < 1) { return(Task.Run(() => { return 0; })); } if (int.TryParse(args.Arguments[0], out int x)) { int result = 0; foreach (var l in bot.coinSystem.userStats) { if (l.Value.coins >= x) { result++; } } bot.SendWhisper(args.Caller, result.ToString()); return(Task.Run(() => { return 5; })); } else { return(Task.Run(() => { return 0; })); } })); whisperCommands.Add("sendmsg", new Command((args) => { if (args.isBroadcaster || args.isModerator || args.isOwner) { bot.SendMessageRaw(args.ArgumentsAsString); } return(Task.Run(() => { return 0; })); })); whisperCommands.Add("tryrefresh", new Command(async(args) => { if (args.isOwner) { bot.SendWhisper(args.Caller, "Starting refresh"); try { var botTokens = await TwitchBot.api.V5.Auth.RefreshAuthTokenAsync(Credentials.botRefreshToken, "0osemzvzybmaunf9tvz78iag3sfhlw", TwitchBot.api.Settings.ClientId); var authTokens = await TwitchBot.api.V5.Auth.RefreshAuthTokenAsync(Credentials.authRefreshToken, "0osemzvzybmaunf9tvz78iag3sfhlw", TwitchBot.api.Settings.ClientId); Credentials.UpdateTokens(bot.credentialsPath, botTokens.AccessToken, authTokens.AccessToken, botTokens.RefreshToken, authTokens.RefreshToken); bot.SendWhisper(args.Caller, "Successfully refreshed"); } catch (Exception ex) { bot.SendWhisper(args.Caller, $"Error during refresh: {ex.Message}"); bot.LogError("TryRefresh", $"Error message: {ex.Message}"); } } return(0); })); }
void FillPersonalizedChatCommands() { chatCommands.Add("winner", new Command(async(args) => { if (args.isBroadcaster) { if (giveawayQueue.Count == 0 && tier1subs == 0) { bot.SendMessageRaw($"@{args.Caller} no more giveaways"); return(0); } if (args.Arguments.Count == 0) { bot.SendMessageRaw($"@{args.Caller} usage: !winner [value] or !winner [username] [value]"); return(0); } if (args.Arguments.Count < 2) { if (int.TryParse(args.Arguments[0], out int value)) { GiveawayMember g; if (giveawayQueue.Count > 0) { g = giveawayQueue.Dequeue(); } else { g = new GiveawayMember($"{tier1subs} tier 1 subs", tier1subs, 1); } int tierMult; if (g.tier < 3) { tierMult = g.tier; } else { tierMult = 6; } int winValue = value * g.months * tierMult; Random rng = new Random(); var chat = await bot.GetChatList(); int id = rng.Next(chat.Count); string winner = chat[id].Username; bot.SendMessageRaw($"And the winner of {winValue} coins on behalf of {g.name} is... @{winner}!"); if (CheckHouse(winner, g.name)) { bot.SendMessageRaw($"When the house wins, EVERYBODY wins! Coins for everyone!"); await bot.coinSystem.CoinGiveaway(winValue); bot.SendMessageRaw($"Successfully gave {winValue} {Credentials.currencyName} to everyone in chat"); } else { bot.coinSystem.AddCoins(winner, winValue); bot.SendMessageRaw($"Successfully gave {winValue} {Credentials.currencyName} to {winner}, new balance is {bot.coinSystem.GetCoins(winner)} {Credentials.currencyName}"); } } else { bot.SendMessageRaw($"@{args.Caller} usage: !winner [value]"); } } else { if (bot.coinSystem.CheckKey(args.Arguments[0])) { if (int.TryParse(args.Arguments[1], out int value)) { string house = args.Arguments[0]; Random rng = new Random(); var chat = await bot.GetChatList(); int id = rng.Next(chat.Count); string winner = chat[id].Username; bot.SendMessageRaw($"And the winner of {value} {Credentials.currencyName} is... @{winner}!"); if (CheckHouse(winner, house)) { bot.SendMessageRaw("When the house wins, EVERYBODY wins! Coins for everyone!"); await bot.coinSystem.CoinGiveaway(value); bot.SendMessageRaw($"Successfully gave {value} {Credentials.currencyName} to everyone in chat"); } else { bot.coinSystem.AddCoins(winner, value); bot.SendMessageRaw($"Successfully gave {value} {Credentials.currencyName} to @{winner}, new balance is {bot.coinSystem.GetCoins(winner)}"); } } else { bot.SendMessageRaw($"@{args.Caller} usage: !winner [username] [value]"); } } else { bot.SendMessageRaw($"@{args.Caller} usage: !winner [username] [value]"); } } } return(0); }, "Pulls a random winner of a coin giveaway from chat. Broadcaster only. Syntax: !winner [dice roll] or !winner [house] [value]\n")); chatCommands.Add("giveaways", new Command(async(args) => { if (args.isBroadcaster) { string msg = ""; foreach (var g in giveawayQueue) { msg += $"{g.name}: {g.months} months, tier {g.tier}\n"; } if (tier1subs > 0) { msg += $"{tier1subs} tier 1 subs\n"; } var paste = await bot.PasteOnPasteBin(msg, $"{DateTime.Now.Year}.{DateTime.Now.Month}.{DateTime.Now.Day} IggiBot giveaways"); bot.SendWhisper(args.Caller, paste); return(5); } return(0); }, "Posts giveaway list on pastebin. Broadcaster only. Syntax: !giveaways\n")); chatCommands.Add("kraken", new Command(async(args) => { if (args.isBroadcaster || args.isModerator || args.isOwner) { bot.SendMessageRaw($"Release the Kraken!"); totalKrakens += nextKraken; nextKraken += 11; await UpdateFiles(); } return(0); }, "Releases the Kraken! Moderator+ only. Syntax: !kraken\n")); chatCommands.Add("missedcoins", new Command(async(args) => { if (args.isBroadcaster || args.isModerator || args.isOwner) { if (args.Arguments.Count > 0) { if (int.TryParse(args.Arguments[0], out int value)) { missedCoins += value; await UpdateFiles(); } else if (float.TryParse(args.Arguments[0], out float valueF)) { missedCoins += valueF; await UpdateFiles(); } } } return(0); }, "Adds missed extra coins. Moderator+ only. Syntax: !missedcoins [float value]\n")); chatCommands.Remove("winner"); chatCommands.Remove("giveaways"); }