public static SendMessage Duel(MessageEventArgs e, ChatMemberViewModel userModel) { var sourceRouletteId = ChatterInfoRepository.Instance.GetRouletteId(e.Username, e.Channel); var sourceduelName = RouletteInfoRepository.Instance.Get(sourceRouletteId).DuelName; if (!string.IsNullOrEmpty(sourceduelName)) return SendMessage.GetWhisper(string.Format(DuelConfig.Texts.AlreadyInDuel, sourceduelName)); var split = e.Message.Split(' '); if(split.Length < 2) return SendMessage.GetWhisper(string.Format(DuelConfig.Texts.IncorrectSyntax, Command.Дуэль)); var nameForDuel = split[1]; if (nameForDuel.StartsWith(TwitchConstName.UserStartName.ToString())) nameForDuel = nameForDuel.TrimStart(TwitchConstName.UserStartName); var allChatters = userModel.Channel.GetAllChatters(); if (!allChatters.Any(t => t.Name.Equals(nameForDuel, StringComparison.InvariantCultureIgnoreCase))) return SendMessage.GetWhisper(string.Format(DuelConfig.Texts.NoInChat, nameForDuel)); if(e.Username.Equals(nameForDuel, StringComparison.InvariantCultureIgnoreCase)) return SendMessage.GetMessage(string.Format(DuelConfig.Texts.Roulette, Command.Рулетка)); var targetRouletteId = ChatterInfoRepository.Instance.GetRouletteId(nameForDuel, e.Channel); var targetduelName = RouletteInfoRepository.Instance.Get(targetRouletteId).DuelName; if (!string.IsNullOrEmpty(targetduelName)) { if(e.Username.Equals(targetduelName, StringComparison.InvariantCultureIgnoreCase)) return SendMessage.GetWhisper(string.Format(DuelConfig.Texts.NeedConfirm, nameForDuel, Command.Принять)); return SendMessage.GetWhisper(string.Format(DuelConfig.Texts.TargetAlreadyInDuel, nameForDuel, targetduelName)); } RouletteInfoRepository.Instance.SetDuelName(sourceRouletteId, nameForDuel); var tokenSource = new CancellationTokenSource(); RemoveDuelNameTokens.AddOrUpdate(e.Username.ToUpper(), tokenSource, (k, v) => tokenSource); Action sleep = () => { Thread.Sleep(DuelConfig.Params.Wait * 1000); }; Action continueWith = () => { RouletteInfoRepository.Instance.RemoveDuelName(sourceRouletteId); var message = SendMessage.GetMessage(string.Format(DuelConfig.Texts.NoConfirm, nameForDuel)); userModel.Channel.SendMessage(e, message); }; var wait = TimerFactory.RunOnce(userModel.Channel, sleep); wait.ContinueWith(task => continueWith(), tokenSource.Token); return SendMessage.GetMessage(string.Format(DuelConfig.Texts.Start, nameForDuel, DuelConfig.Params.Wait, Command.Принять, e.Username, Command.Рулетка)); }
public WhisperWindowViewModel(TwitchIrcClient irc, string userName, MessageEventArgs e = null) { _irc = irc; _irc.OnWhisper += WhisperReceived; _userName = userName; SendCommand = new DelegateCommand(Send); if (e != null) WhisperReceived(e); }
public static SendMessage RemoveSteam(MessageEventArgs e) { if (Params.Disable) return SendMessage.None; var message = e.UserType.HasFlag(UserType.Broadcaster) ? RemoveSteamBroadcaster(e.Message, e.Channel) : RemoveSteamSimple(e.Username, e.Message, e.Channel); return SendMessage.GetWhisper(message); }
public static SendMessage RouletteInfo(MessageEventArgs e) { if (e.UserType.HasFlag(UserType.Broadcaster) || e.UserType.HasFlag(UserType.Admin) || e.UserType.HasFlag(UserType.Globalmoderator) || e.UserType.HasFlag(UserType.Staff)) return SendMessage.GetMessage(Roulette.Texts.Admin); if (e.UserType.HasFlag(UserType.Moderator)) return SendMessage.GetMessage(Roulette.Texts.Moder); var rouletteId = ChatterInfoRepository.Instance.GetRouletteId(e.Username, e.Channel); var roulette = RouletteInfoRepository.Instance.Get(rouletteId); var message = string.Format(Roulette.Texts.Stats, roulette.TryCount, roulette.DeathCount, roulette.MaxStreak, roulette.MaxPercent.ToString("0.####%"), roulette.Streak, roulette.Percent.ToString("0.####%"), roulette.DuelScore); return SendMessage.GetMessage(message); }
public static SendMessage Start(MessageEventArgs e, ChatMemberViewModel userModel) { var config = e.Message.ToLower().Replace($"{TwitchConstName.Command}{Command.ОпросСтарт}".ToLower(), "").Trim(); var split = config.Split(';'); int seconds; if (!int.TryParse(split[0], out seconds) || split.Length < 3 || seconds < 5) return SendMessage.GetWhisper(string.Format(Vote.IncorrectSyntax, Command.ОпросСтарт)); var question = split[1]; var votes = split.Select(t => t.Trim()).ToList(); votes.RemoveAt(0); votes.RemoveAt(0); userModel.Channel.VoteHolder.StartNewVote(question, votes, seconds); return SendMessage.None; }
public static SendMessage UserVote(MessageEventArgs e, ChatMemberViewModel userModel) { var vote = userModel.Channel.VoteHolder; if (!vote.IsVoteActive) return SendMessage.None; if (vote.Voted.Contains(e.Username)) return SendMessage.None; var userVote = e.Message.ToLower().Replace($"{TwitchConstName.Command}{Command.Голос}".ToLower(), "").Trim(); if (vote.Votes.ContainsKey(userVote)) { vote.Votes[userVote]++; vote.Voted.Add(e.Username); } return SendMessage.None; }
public static SendMessage RouletteGetTop(MessageEventArgs e) { var top = RouletteInfoRepository.Instance.GetTop(Roulette.Params.Top, e.Channel); var builder = new StringBuilder(); builder.Append(Roulette.Texts.TopStart); for (var i = 1; i <= top.Count; i++) { var info = top[i-1]; var chatter = ChatterInfoRepository.Instance.GetByRouletteId(info.Id); if (chatter != null) { var message = string.Format(Roulette.Texts.TopUser, i, chatter.Name, info.MaxPercent.ToString("0.####%"), info.MaxStreak); builder.Append(message); } } return SendMessage.GetMessage(builder.ToString()); }
public static SendMessage RouletteTry(MessageEventArgs e) { if (e.UserType.HasFlag(UserType.Broadcaster) || e.UserType.HasFlag(UserType.Admin) || e.UserType.HasFlag(UserType.Globalmoderator) || e.UserType.HasFlag(UserType.Staff)) return SendMessage.GetMessage(Roulette.Texts.Admin); if (e.UserType.HasFlag(UserType.Moderator)) return SendMessage.GetMessage(Roulette.Texts.Moder); var rouletteId = ChatterInfoRepository.Instance.GetRouletteId(e.Username, e.Channel); var currentTry = RouletteInfoRepository.Instance.Get(rouletteId).CurrentTry; var rnd = new Random(); var firstNumber = rnd.Next(1, 7 - currentTry); var percent = 1 - 1 / (6.0 - currentTry); currentTry++; RouletteInfoRepository.Instance.AddTry(rouletteId); if (firstNumber == 1) { var secondNumber = rnd.Next(1, 21); if (secondNumber == 1) { RouletteInfoRepository.Instance.ResetCurrentTry(rouletteId); RouletteInfoRepository.Instance.AddPercent(rouletteId, 0.05); return SendMessage.GetMessage(Roulette.Texts.Misfire); } RouletteInfoRepository.Instance.AddDeath(rouletteId); var message = SendMessage.GetMessage(string.Format(Roulette.Texts.Death, currentTry)); return SendMessage.GetTimeout(e.Username, Roulette.Params.Timeout).AddMessage(message); } RouletteInfoRepository.Instance.AddPercent(rouletteId, percent); return SendMessage.GetMessage(string.Format(Roulette.Texts.Luck, currentTry)); }
static void OnMessage(MessageEventArgs e) { Console.WriteLine($"{e.Username} on channel {e.Channel}: {e.Message}"); }
// Open a whisper once a whisper is received private void OnWhisper(MessageEventArgs e) { if (!WhisperOn) return; Application.Current.Dispatcher.Invoke(() => { if (!Whispers.Any(x => x.UserName.Equals(e.Username))) Whispers.Add(new WhisperWindowViewModel(_irc, e.Username, e)); }); }
public bool IsHaveAccess(MessageEventArgs e) { if (IsDisabled) return false; return Access.HasFlag(UserType.Default) || (Access & e.UserType) != 0; }
public static SendMessage DuelStart(MessageEventArgs e, ChatMemberViewModel userModel) { var sourceRouletteId = ChatterInfoRepository.Instance.GetRouletteId(e.Username, e.Channel); var sourceduelName = RouletteInfoRepository.Instance.Get(sourceRouletteId).DuelName; if (!string.IsNullOrEmpty(sourceduelName)) return SendMessage.GetWhisper(string.Format(DuelConfig.Texts.AlreadyInDuel, sourceduelName)); var split = e.Message.Split(' '); if (split.Length < 2) return SendMessage.GetWhisper(string.Format(DuelConfig.Texts.IncorrectSyntaxStart, Command.Принять)); var nameForDuel = split[1]; if (nameForDuel.StartsWith(TwitchConstName.UserStartName.ToString())) nameForDuel = nameForDuel.TrimStart(TwitchConstName.UserStartName); var allChatters = userModel.Channel.GetAllChatters(); if (!allChatters.Any(t => t.Name.Equals(nameForDuel, StringComparison.InvariantCultureIgnoreCase))) return SendMessage.GetWhisper(string.Format(DuelConfig.Texts.NoInChat, nameForDuel)); if (e.Username.Equals(nameForDuel, StringComparison.InvariantCultureIgnoreCase)) return SendMessage.GetMessage(string.Format(DuelConfig.Texts.Roulette, Command.Рулетка)); var targetRouletteId = ChatterInfoRepository.Instance.GetRouletteId(nameForDuel, e.Channel); var targetduelName = RouletteInfoRepository.Instance.Get(targetRouletteId).DuelName; if (!string.IsNullOrEmpty(targetduelName) && !e.Username.Equals(targetduelName, StringComparison.InvariantCultureIgnoreCase)) return SendMessage.GetWhisper(string.Format(DuelConfig.Texts.TargetAlreadyInDuel, nameForDuel, targetduelName)); RouletteInfoRepository.Instance.SetDuelName(sourceRouletteId, nameForDuel); RouletteInfoRepository.Instance.Reset(sourceRouletteId); RouletteInfoRepository.Instance.Reset(targetRouletteId); if (RemoveDuelNameTokens.ContainsKey(nameForDuel.ToUpper())) RemoveDuelNameTokens[nameForDuel.ToUpper()].Cancel(); Action action = () => { WaitAndDefaultTimers(); var moderators = userModel.Channel.GetGroup(ChatterType.Moderators); if (e.Username.Equals(e.Channel, StringComparison.InvariantCultureIgnoreCase) || nameForDuel.Equals(e.Channel, StringComparison.InvariantCultureIgnoreCase)) { var user = e.Username.Equals(e.Channel) ? nameForDuel : e.Username; if (moderators.Any(t => t.Name.Equals(user, StringComparison.InvariantCultureIgnoreCase))) { var mes = SendMessage.GetMessage(string.Format(DuelConfig.Texts.AdminVsModer, e.Channel, user)); userModel.Channel.SendMessage(null, mes); return; } var timeout = SendMessage.GetTimeout(user, RouletteTimeout); var message = SendMessage.GetMessage(string.Format(DuelConfig.Texts.AdminVsUser, e.Channel, user)); timeout.AddMessage(message); userModel.Channel.SendMessage(null, timeout); return; } if (moderators.Any(t => t.Name.Equals(e.Username, StringComparison.InvariantCultureIgnoreCase)) || moderators.Any(t => t.Name.Equals(nameForDuel, StringComparison.InvariantCultureIgnoreCase))) { var user = moderators.Any(t => t.Name.Equals(e.Username, StringComparison.InvariantCultureIgnoreCase)) ? nameForDuel : e.Username; var moder = user == nameForDuel ? e.Username : nameForDuel; if (moderators.Any(t => t.Name.Equals(user, StringComparison.InvariantCultureIgnoreCase))) { var mes = SendMessage.GetMessage(string.Format(DuelConfig.Texts.ModerVsModer, e.Username, nameForDuel)); userModel.Channel.SendMessage(null, mes); return; } var timeout = SendMessage.GetTimeout(user, RouletteTimeout); var message = SendMessage.GetMessage(string.Format(DuelConfig.Texts.ModerVsUser, moder, user)); timeout.AddMessage(message); userModel.Channel.SendMessage(null, timeout); return; } var context = RouletteInfoRepository.Instance; while (true) { var first = Roulette(context, targetRouletteId, e.Username, nameForDuel); if (first.Type == SendType.Timeout) { context.AddDuelScore(sourceRouletteId); var win = SendMessage.GetMessage(string.Format(DuelConfig.Texts.Win, e.Username, nameForDuel)); first.NextMessage.AddMessage(win); userModel.Channel.SendMessage(null, first); return; } userModel.Channel.SendMessage(null, first); WaitAndDefaultTimers(); var second = Roulette(context, sourceRouletteId, nameForDuel, e.Username); if (second.Type == SendType.Timeout) { context.AddDuelScore(targetRouletteId); var win = SendMessage.GetMessage(string.Format(DuelConfig.Texts.Win, nameForDuel, e.Username)); second.NextMessage.AddMessage(win); userModel.Channel.SendMessage(null, second); return; } userModel.Channel.SendMessage(null, second); WaitAndDefaultTimers(); } }; Action continueWith = () => { RouletteInfoRepository.Instance.RemoveDuelName(sourceRouletteId); RouletteInfoRepository.Instance.RemoveDuelName(targetRouletteId); }; var wait = TimerFactory.RunOnce(userModel.Channel, action); wait.ContinueWith(task => continueWith()); return SendMessage.GetMessage(string.Format(DuelConfig.Texts.Confirm, nameForDuel, e.Username)); }