public void SetMessage(ISiteMessage message, IMessageMetadata messageMetadata) { foreach (var plugin in _plugins) { plugin.OnMessageReceived(message, messageMetadata); } }
public void OnMessageReceived(ISiteMessage message, IMessageMetadata messageMetadata) { //if (!(message is IMessageComment comment)) return; if (!Options.IsEnabled || messageMetadata.IsNgUser || messageMetadata.IsInitialComment) { return; } //各サイトのサービス名 //YouTubeLive:youtubelive //ニコ生:nicolive //Twitch:twitch //Twicas:twicas //ふわっち:whowatch //OPENREC:openrec //Mirrativ:mirrativ //LINELIVE:linelive //Periscope:periscope //Mixer:mixer if (message is MirrativSitePlugin.IMirrativJoinRoom && !Options.IsMirrativeJoin) { return; } //string name; //if (HasNickname(messageMetadata.User)) //{ // name = messageMetadata.User.Nickname; //} //else //{ // name = comment.NameItems.ToText(); //} var siteName = Tools.GetSiteName(message); var(name, comment) = PluginCommon.Tools.GetData(message); if (HasNickname(messageMetadata.User)) { name = messageMetadata.User.Nickname; } //var data = new Data //{ // Comment = comment.CommentItems.ToText(), // Nickname = name, // SiteName = siteName, //}; var data = new Data { Comment = comment, Nickname = name, SiteName = siteName, }; _commentCollection.Add(data); }
public void OnMessageReceived(ISiteMessage message, IMessageMetadata messageMetadata) { if (!_options.IsEnabled || messageMetadata.IsNgUser || messageMetadata.IsInitialComment) { return; } var(name, text) = PluginCommon.Tools.GetData(message); if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(text)) { _model.SetComment(messageMetadata.User.UserId, name, text, messageMetadata.User, messageMetadata.SiteContextGuid); } }
public void OnMessageReceived(ISiteMessage message, IMessageMetadata messageMetadata) { //各サイトのサービス名 //YouTubeLive:youtubelive //ニコ生:nicolive //Twitch:twitch //Twicas:twicas //ふわっち:whowatch //OPENREC:openrec //Mirrativ:mirrativ //LINELIVE:linelive //Periscope:periscope //Mixer:mixer /* * string name; * if (messageMetadata.User != null && !string.IsNullOrEmpty(messageMetadata.User.Nickname)) * { * name = messageMetadata.User.Nickname; * } * else * { * name = comment.NameItems.ToText(); * } * * * string _comment = comment.CommentItems.ToText(); */ var siteName = Tools.GetSiteName(message); var(name, comment) = PluginCommon.Tools.GetData(message); if (HasNickname(messageMetadata.User)) { name = messageMetadata.User.Nickname; } name = name.Replace("\n", "").Replace("$", "$").Replace("\\", "¥").Replace("/", "/"); string _comment = comment; _comment = _comment.Replace("\n", "").Replace("$", "$").Replace("\\", "¥").Replace("/", "/").Replace("\"", ""); var data = new Data { Comment = _comment, Nickname = name, SiteName = siteName, }; _commentCollection.Add(data); }
public void OnMessageReceived(ISiteMessage message, IMessageMetadata messageMetadata) { if (!_options.IsEnabled || messageMetadata.IsNgUser || messageMetadata.IsInitialComment || (messageMetadata.Is184 && !_options.Want184Read)) { return; } var(name, comment) = GetData(message, _options); //nameがnullでは無い場合かつUser.Nicknameがある場合はNicknameを採用 if (!string.IsNullOrEmpty(name) && messageMetadata.User != null && !string.IsNullOrEmpty(messageMetadata.User.Nickname)) { name = messageMetadata.User.Nickname; } try { // オプションで指定するFormatの変数名をString.Formatの引数に変換して入力変換を行う。 var formatCode = _options.FormatCode; formatCode = formatCode.Replace("$name", "{0}"); formatCode = formatCode.Replace("$comment", "{1}"); var dataToRead = string.Format(formatCode, name, comment); TalkText(dataToRead); } catch (System.Runtime.Remoting.RemotingException) { //多分棒読みちゃんが起動していない。 if (_voiceRoidProcess == null && System.IO.File.Exists(_options.VoiceRoidPath)) { _voiceRoidProcess = Process.Start(_options.VoiceRoidPath); _voiceRoidProcess.EnableRaisingEvents = true; _voiceRoidProcess.Exited += (s, e) => { try { _voiceRoidProcess?.Close();//2018/03/25ここで_bouyomiChanProcessがnullになる場合があった } catch { } _voiceRoidProcess = null; }; } //起動するまでの間にコメントが投稿されたらここに来てしまうが諦める。 } catch (Exception) { } }
/// <summary> /// コメントを受信したら書き出すまでためておく /// </summary> public void OnMessageReceived(ISiteMessage message, IMessageMetadata messageMetadata) { if (transferMode > 0) // 稼働中 { var(name, comment, cmntSource) = GetData(message); // nameがnullでは無い場合かつUser.Nicknameがある場合はNicknameを採用 if (!string.IsNullOrEmpty(name) && messageMetadata.User != null && !string.IsNullOrEmpty(messageMetadata.User.Nickname)) { name = messageMetadata.User.Nickname; } string _name = name; string _comment = comment; string _cmntSource = cmntSource; if (transferMode == 0) // 転送しない { } else if ((transferMode == 1) && (_cmntSource == "Nicolive")) // スタジオ ニコ生運営コメのみ転送 一般コメ転送しない { } else if ((transferMode == 1) && (_cmntSource == "Showroom")) // スタジオ ショールームコメ転送しない { } else // 全転送 (transferMode ==2) { // 追加 buffEmit.Add(" cytanb.EmitCommentMessage(\'" + _comment + "\', {name = \'" + _name + "\', commentSource = \'" + _cmntSource + "\'})"); } } else { // do nothing } }
public static (string name, string comment) GetData(ISiteMessage message) { string name = null; string comment = null; //if (message is YouTubeLiveSitePlugin.IYouTubeLiveMessage ytMessage) //{ if (message is YouTubeLiveSitePlugin.IYouTubeLiveComment ytComment) { comment = ytComment.CommentItems.ToText(); name = ytComment.NameItems.ToText(); } else if (message is YouTubeLiveSitePlugin.IYouTubeLiveSuperchat superchat) { comment = superchat.CommentItems.ToText(); name = superchat.NameItems.ToText(); } //} //else if (message is NicoSitePlugin.INicoMessage nicoMessage) //{ else if (message is NicoSitePlugin.INicoComment nicoComment) { comment = nicoComment.Text; name = nicoComment.UserName; } else if (message is NicoSitePlugin.INicoItem nicoItem) { comment = nicoItem.Text; //name = nicoItem.; } //} //else if (message is TwitchSitePlugin.ITwitchMessage twMessage) //{ else if (message is TwitchSitePlugin.ITwitchComment twComment) { comment = twComment.CommentItems.ToText(); name = twComment.DisplayName; } //} //else if (message is TwicasSitePlugin.ITwicasMessage casMessage) //{ else if (message is TwicasSitePlugin.ITwicasComment casComment) { comment = casComment.CommentItems.ToText(); name = casComment.UserName; } else if (message is TwicasSitePlugin.ITwicasKiitos casKiitos) { comment = casKiitos.CommentItems.ToText(); name = casKiitos.UserName; } else if (message is TwicasSitePlugin.ITwicasItem casItem) { comment = casItem.CommentItems.ToText(); name = casItem.UserName; } //} //else if (message is WhowatchSitePlugin.IWhowatchMessage wwMessage) //{ else if (message is WhowatchSitePlugin.IWhowatchComment wwComment) { comment = wwComment.Comment; name = wwComment.UserName; } else if (message is WhowatchSitePlugin.IWhowatchItem wwItem) { comment = wwItem.Comment; name = wwItem.UserName; } //} //else if (message is OpenrecSitePlugin.IOpenrecMessage opMessage) //{ else if (message is OpenrecSitePlugin.IOpenrecComment opComment) { comment = opComment.MessageItems.ToText(); name = opComment.NameItems.ToText(); } //} //else if (message is MirrativSitePlugin.IMirrativMessage mrMessage) //{ else if (message is MirrativSitePlugin.IMirrativComment mrComment) { comment = mrComment.Text; name = mrComment.UserName; } //} //else if (message is LineLiveSitePlugin.ILineLiveMessage lineLiveMessage) //{ else if (message is LineLiveSitePlugin.ILineLiveComment llComment) { comment = llComment.Text; name = llComment.DisplayName; } //} //else if (message is PeriscopeSitePlugin.IPeriscopeMessage psMessage) //{ else if (message is PeriscopeSitePlugin.IPeriscopeComment psComment) { comment = psComment.Text; name = psComment.DisplayName; } else if (message is ShowRoomSitePlugin.IShowRoomComment srComment) { comment = srComment.Text; name = srComment.UserName; } //} //else if (message is MixerSitePlugin.IMixerMessage mixerMessage) //{ else if (message is MixerSitePlugin.IMixerComment mixerComment) { comment = mixerComment.CommentItems.ToText(); name = mixerComment.UserName; } //} //else if (message is MildomSitePlugin.IMildomMessage mildomMessage) //{ else if (message is MildomSitePlugin.IMildomComment mildomComment) { comment = mildomComment.CommentItems.ToText(); name = mildomComment.UserName; } //} return(name, comment); }
public static string GetSiteName(ISiteMessage message) { //各サイトのサービス名 //YouTubeLive:youtubelive //ニコ生:nicolive //Twitch:twitch //Twicas:twicas //ふわっち:whowatch //OPENREC:openrec //Mirrativ:mirrativ //LINELIVE:linelive //Periscope:periscope //Mixer:mixer //Mildom:mildom //NimoTV:nimotv string siteName; switch (message) { case YouTubeLiveSitePlugin.IYouTubeLiveMessage _: siteName = "youtubelive"; break; case NicoSitePlugin.INicoMessage _: siteName = "nicolive"; break; case TwitchSitePlugin.ITwitchMessage _: siteName = "twitch"; break; case TwicasSitePlugin.ITwicasMessage _: siteName = "twicas"; break; case WhowatchSitePlugin.IWhowatchMessage _: siteName = "whowatch"; break; case OpenrecSitePlugin.IOpenrecMessage _: siteName = "openrec"; break; case MirrativSitePlugin.IMirrativMessage _: siteName = "mirrativ"; break; case LineLiveSitePlugin.ILineLiveMessage _: siteName = "linelive"; break; case PeriscopeSitePlugin.IPeriscopeMessage _: siteName = "periscope"; break; case MixerSitePlugin.IMixerMessage _: siteName = "mixer"; break; case MildomSitePlugin.IMildomMessage _: siteName = "mildom"; break; default: siteName = "unknown"; break; } return(siteName); }
private static (string name, string comment) GetData(ISiteMessage message, Options options) { string name = null; string comment = null; if (false) { } else if (message is IYouTubeLiveMessage youTubeLiveMessage) { switch (youTubeLiveMessage.YouTubeLiveMessageType) { case YouTubeLiveMessageType.Connected: if (options.IsYouTubeLiveConnect) { name = null; comment = (youTubeLiveMessage as IYouTubeLiveConnected).Text; } break; case YouTubeLiveMessageType.Disconnected: if (options.IsYouTubeLiveDisconnect) { name = null; comment = (youTubeLiveMessage as IYouTubeLiveDisconnected).Text; } break; case YouTubeLiveMessageType.Comment: if (options.IsYouTubeLiveComment) { if (options.IsYouTubeLiveCommentNickname) { name = (youTubeLiveMessage as IYouTubeLiveComment).NameItems.ToText(); } if (options.IsYouTubeLiveCommentStamp) { comment = (youTubeLiveMessage as IYouTubeLiveComment).CommentItems.ToTextWithImageAlt(); } else { comment = (youTubeLiveMessage as IYouTubeLiveComment).CommentItems.ToText(); } } break; case YouTubeLiveMessageType.Superchat: if (options.IsYouTubeLiveSuperchat) { if (options.IsYouTubeLiveSuperchatNickname) { name = (youTubeLiveMessage as IYouTubeLiveSuperchat).NameItems.ToText(); } //TODO:superchat中のスタンプも読ませるべきでは? comment = (youTubeLiveMessage as IYouTubeLiveSuperchat).CommentItems.ToText(); } break; } } else if (message is IOpenrecMessage openrecMessage) { switch (openrecMessage.OpenrecMessageType) { case OpenrecMessageType.Connected: if (options.IsOpenrecConnect) { name = null; comment = (openrecMessage as IOpenrecConnected).Text; } break; case OpenrecMessageType.Disconnected: if (options.IsOpenrecDisconnect) { name = null; comment = (openrecMessage as IOpenrecDisconnected).Text; } break; case OpenrecMessageType.Comment: if (options.IsOpenrecComment) { if (options.IsOpenrecCommentNickname) { name = (openrecMessage as IOpenrecComment).NameItems.ToText(); } comment = (openrecMessage as IOpenrecComment).MessageItems.ToText(); } break; } } else if (message is ITwitchMessage twitchMessage) { switch (twitchMessage.TwitchMessageType) { case TwitchMessageType.Connected: if (options.IsTwitchConnect) { name = null; comment = (twitchMessage as ITwitchConnected).Text; } break; case TwitchMessageType.Disconnected: if (options.IsTwitchDisconnect) { name = null; comment = (twitchMessage as ITwitchDisconnected).Text; } break; case TwitchMessageType.Comment: if (options.IsTwitchComment) { if (options.IsTwitchCommentNickname) { name = (twitchMessage as ITwitchComment).DisplayName; } comment = (twitchMessage as ITwitchComment).CommentItems.ToText(); } break; } } else if (message is INicoMessage NicoMessage) { switch (NicoMessage.NicoMessageType) { case NicoMessageType.Connected: if (options.IsNicoConnect) { name = null; comment = (NicoMessage as INicoConnected).Text; } break; case NicoMessageType.Disconnected: if (options.IsNicoDisconnect) { name = null; comment = (NicoMessage as INicoDisconnected).Text; } break; case NicoMessageType.Comment: if (options.IsNicoComment) { if (options.IsNicoCommentNickname) { name = (NicoMessage as INicoComment).UserName; } comment = (NicoMessage as INicoComment).Text; } break; case NicoMessageType.Item: if (options.IsNicoItem) { if (options.IsNicoItemNickname) { //name = (NicoMessage as INicoItem).NameItems.ToText(); } comment = (NicoMessage as INicoItem).Text; } break; case NicoMessageType.Ad: if (options.IsNicoAd) { name = null; comment = (NicoMessage as INicoAd).Text; } break; } } else if (message is ITwicasMessage twicasMessage) { switch (twicasMessage.TwicasMessageType) { case TwicasMessageType.Connected: if (options.IsTwicasConnect) { name = null; comment = (twicasMessage as ITwicasConnected).Text; } break; case TwicasMessageType.Disconnected: if (options.IsTwicasDisconnect) { name = null; comment = (twicasMessage as ITwicasDisconnected).Text; } break; case TwicasMessageType.Comment: if (options.IsTwicasComment) { if (options.IsTwicasCommentNickname) { name = (twicasMessage as ITwicasComment).UserName; } comment = (twicasMessage as ITwicasComment).CommentItems.ToText(); } break; } } else if (message is ILineLiveMessage lineLiveMessage) { switch (lineLiveMessage.LineLiveMessageType) { case LineLiveMessageType.Connected: if (options.IsLineLiveConnect) { name = null; comment = (lineLiveMessage as ILineLiveConnected).Text; } break; case LineLiveMessageType.Disconnected: if (options.IsLineLiveDisconnect) { name = null; comment = (lineLiveMessage as ILineLiveDisconnected).Text; } break; case LineLiveMessageType.Comment: if (options.IsLineLiveComment) { if (options.IsLineLiveCommentNickname) { name = (lineLiveMessage as ILineLiveComment).DisplayName; } comment = (lineLiveMessage as ILineLiveComment).Text; } break; } } else if (message is IWhowatchMessage whowatchMessage) { switch (whowatchMessage.WhowatchMessageType) { case WhowatchMessageType.Connected: if (options.IsWhowatchConnect) { name = null; comment = (whowatchMessage as IWhowatchConnected).Text; } break; case WhowatchMessageType.Disconnected: if (options.IsWhowatchDisconnect) { name = null; comment = (whowatchMessage as IWhowatchDisconnected).Text; } break; case WhowatchMessageType.Comment: if (options.IsWhowatchComment) { if (options.IsWhowatchCommentNickname) { name = (whowatchMessage as IWhowatchComment).UserName; } comment = (whowatchMessage as IWhowatchComment).Comment; } break; case WhowatchMessageType.Item: if (options.IsWhowatchItem) { if (options.IsWhowatchItemNickname) { name = (whowatchMessage as IWhowatchItem).UserName; } comment = (whowatchMessage as IWhowatchItem).Comment; } break; } } else if (message is IMirrativMessage mirrativMessage) { switch (mirrativMessage.MirrativMessageType) { case MirrativMessageType.Connected: if (options.IsMirrativConnect) { name = null; comment = (mirrativMessage as IMirrativConnected).Text; } break; case MirrativMessageType.Disconnected: if (options.IsMirrativDisconnect) { name = null; comment = (mirrativMessage as IMirrativDisconnected).Text; } break; case MirrativMessageType.Comment: if (options.IsMirrativComment) { if (options.IsMirrativCommentNickname) { name = (mirrativMessage as IMirrativComment).UserName; } comment = (mirrativMessage as IMirrativComment).Text; } break; case MirrativMessageType.JoinRoom: if (options.IsMirrativJoinRoom) { name = null; comment = (mirrativMessage as IMirrativJoinRoom).Text; } break; case MirrativMessageType.Item: if (options.IsMirrativItem) { name = null; comment = (mirrativMessage as IMirrativItem).Text; } break; } } else if (message is IPeriscopeMessage PeriscopeMessage) { switch (PeriscopeMessage.PeriscopeMessageType) { case PeriscopeMessageType.Connected: if (options.IsPeriscopeConnect) { name = null; comment = (PeriscopeMessage as IPeriscopeConnected).Text; } break; case PeriscopeMessageType.Disconnected: if (options.IsPeriscopeDisconnect) { name = null; comment = (PeriscopeMessage as IPeriscopeDisconnected).Text; } break; case PeriscopeMessageType.Comment: if (options.IsPeriscopeComment) { if (options.IsPeriscopeCommentNickname) { name = (PeriscopeMessage as IPeriscopeComment).DisplayName; } comment = (PeriscopeMessage as IPeriscopeComment).Text; } break; case PeriscopeMessageType.Join: if (options.IsPeriscopeJoin) { name = null; comment = (PeriscopeMessage as IPeriscopeJoin).Text; } break; case PeriscopeMessageType.Leave: if (options.IsPeriscopeLeave) { name = null; comment = (PeriscopeMessage as IPeriscopeLeave).Text; } break; } } else if (message is IMixerMessage MixerMessage) { switch (MixerMessage.MixerMessageType) { case MixerMessageType.Connected: if (options.IsMixerConnect) { name = null; comment = (MixerMessage as IMixerConnected).Text; } break; case MixerMessageType.Disconnected: if (options.IsMixerDisconnect) { name = null; comment = (MixerMessage as IMixerDisconnected).Text; } break; case MixerMessageType.Comment: if (options.IsMixerComment) { if (options.IsMixerCommentNickname) { name = (MixerMessage as IMixerComment).UserName; } comment = (MixerMessage as IMixerComment).CommentItems.ToText(); } break; //case MixerMessageType.Join: // if (_options.IsMixerJoin) // { // name = null; // comment = (MixerMessage as IMixerJoin).CommentItems.ToText(); // } // break; //case MixerMessageType.Leave: // if (_options.IsMixerLeave) // { // name = null; // comment = (MixerMessage as IMixerLeave).CommentItems.ToText(); // } // break; } } else if (message is IMildomMessage MildomMessage) { switch (MildomMessage.MildomMessageType) { case MildomMessageType.Connected: if (options.IsMildomConnect) { name = null; comment = (MildomMessage as IMildomConnected).Text; } break; case MildomMessageType.Disconnected: if (options.IsMildomDisconnect) { name = null; comment = (MildomMessage as IMildomDisconnected).Text; } break; case MildomMessageType.Comment: if (options.IsMildomComment) { if (options.IsMildomCommentNickname) { name = (MildomMessage as IMildomComment).UserName; } comment = (MildomMessage as IMildomComment).CommentItems.ToText(); } break; case MildomMessageType.JoinRoom: if (options.IsMildomJoin) { name = null; comment = (MildomMessage as IMildomJoinRoom).CommentItems.ToText(); } break; //case MildomMessageType.Leave: // if (_options.IsMildomLeave) // { // name = null; // comment = (MildomMessage as IMildomLeave).CommentItems.ToText(); // } // break; } } return(name, comment); }
/// <summary> /// 名前とコメントを取得 /// 参考:BouyomiPlugin /// </summary> private static (string name, string comment, string cmtSource) GetData(ISiteMessage message) { string name = "(名前なし)"; string comment = "(本文なし)"; string cmntSource = "Unknown"; // ニコ生運営コメント cmntSource = "NCV" NCVからしか転送していなかった名残り // CommentBatonを利用した既存VCIに影響があるのでこのままにしておく // Connected/Disconnected の効果不明 // if (message is INicoMessage NicoMessage) { name = "(運営)"; cmntSource = "NCV"; switch (NicoMessage.NicoMessageType) { case NicoMessageType.Connected: comment = (NicoMessage as INicoConnected).Text; break; case NicoMessageType.Disconnected: comment = (NicoMessage as INicoDisconnected).Text; break; case NicoMessageType.Item: comment = (NicoMessage as INicoGift).Text; break; case NicoMessageType.Ad: comment = (NicoMessage as INicoAd).Text; break; case NicoMessageType.Spi: comment = (NicoMessage as INicoSpi).Text; break; case NicoMessageType.Info: comment = (NicoMessage as INicoInfo).Text; break; case NicoMessageType.Emotion: // エモーション判定のために "/emotion " をつけておく NCVプラグインの影響 comment = "/emotion " + (NicoMessage as INicoEmotion).Content; break; case NicoMessageType.Comment: if ((NicoMessage as INicoComment).Is184 == true) { name = ""; } else { name = (NicoMessage as INicoComment).UserName; } comment = (NicoMessage as INicoComment).Text; cmntSource = "Nicolive"; break; } } // ショールーム:全転送時 (ギフト等の判定できない?) else if (message is IShowRoomMessage showroomMessage) { //name = "(運営)"; cmntSource = "Showroom"; switch (showroomMessage.ShowRoomMessageType) { case ShowRoomMessageType.Comment: name = (showroomMessage as IShowRoomComment).UserName; comment = (showroomMessage as IShowRoomComment).Text; break; } } // Youtube Live else if (message is IYouTubeLiveMessage youTubeLiveMessage) { name = "(運営)"; cmntSource = "Youtubelive"; switch (youTubeLiveMessage.YouTubeLiveMessageType) { case YouTubeLiveMessageType.Connected: // name = null; comment = (youTubeLiveMessage as IYouTubeLiveConnected).Text; break; case YouTubeLiveMessageType.Disconnected: // name = null; comment = (youTubeLiveMessage as IYouTubeLiveDisconnected).Text; break; case YouTubeLiveMessageType.Comment: name = (youTubeLiveMessage as IYouTubeLiveComment).NameItems.ToText(); // comment = (youTubeLiveMessage as IYouTubeLiveComment).CommentItems.ToText(); comment = (youTubeLiveMessage as IYouTubeLiveComment).CommentItems.ToTextWithImageAlt(); break; case YouTubeLiveMessageType.Superchat: name = (youTubeLiveMessage as IYouTubeLiveSuperchat).NameItems.ToText(); // comment = (youTubeLiveMessage as IYouTubeLiveSuperchat).CommentItems.ToText(); comment = (youTubeLiveMessage as IYouTubeLiveSuperchat).PurchaseAmount + " " + (youTubeLiveMessage as IYouTubeLiveSuperchat).CommentItems.ToTextWithImageAlt(); // 縦書きコメビュで強調できるように cmntSource を変えておく cmntSource = "YoutubeliveSC"; break; } } // TwitCasting else if (message is ITwicasMessage twicasMessage) { name = "(運営)"; cmntSource = "Twitcasting"; switch (twicasMessage.TwicasMessageType) { case TwicasMessageType.Connected: // name = null; comment = (twicasMessage as ITwicasConnected).Text; break; case TwicasMessageType.Disconnected: // name = null; comment = (twicasMessage as ITwicasDisconnected).Text; break; case TwicasMessageType.Comment: name = (twicasMessage as ITwicasComment).UserName; comment = (twicasMessage as ITwicasComment).CommentItems.ToText(); break; case TwicasMessageType.Item: name = (twicasMessage as ITwicasItem).UserName; comment = (twicasMessage as ITwicasItem).CommentItems.ToTextWithImageAlt(); break; } } // Openrec else if (message is IOpenrecMessage openrecMessage) { name = "(運営)"; cmntSource = "Openrec"; switch (openrecMessage.OpenrecMessageType) { case OpenrecMessageType.Connected: // name = null; comment = (openrecMessage as IOpenrecConnected).Text; break; case OpenrecMessageType.Disconnected: // name = null; comment = (openrecMessage as IOpenrecDisconnected).Text; break; case OpenrecMessageType.Comment: name = (openrecMessage as IOpenrecComment).NameItems.ToText(); comment = (openrecMessage as IOpenrecComment).MessageItems.ToText(); break; } } // Twitch else if (message is ITwitchMessage twitchMessage) { name = "(運営)"; cmntSource = "Twitch"; switch (twitchMessage.TwitchMessageType) { case TwitchMessageType.Connected: // name = null; comment = (twitchMessage as ITwitchConnected).Text; break; case TwitchMessageType.Disconnected: // name = null; comment = (twitchMessage as ITwitchDisconnected).Text; break; case TwitchMessageType.Comment: name = (twitchMessage as ITwitchComment).DisplayName; comment = (twitchMessage as ITwitchComment).CommentItems.ToText(); break; } } // Whowatch else if (message is IWhowatchMessage whowatchMessage) { name = "(運営)"; cmntSource = "Whowatch"; switch (whowatchMessage.WhowatchMessageType) { case WhowatchMessageType.Connected: // name = null; comment = (whowatchMessage as IWhowatchConnected).Text; break; case WhowatchMessageType.Disconnected: // name = null; comment = (whowatchMessage as IWhowatchDisconnected).Text; break; case WhowatchMessageType.Comment: name = (whowatchMessage as IWhowatchComment).UserName; comment = (whowatchMessage as IWhowatchComment).Comment; break; case WhowatchMessageType.Item: name = (whowatchMessage as IWhowatchItem).UserName; comment = (whowatchMessage as IWhowatchItem).Comment + "[" + (whowatchMessage as IWhowatchItem).ItemName + "x" + (whowatchMessage as IWhowatchItem).ItemCount.ToString() + "]"; break; } } //// 確認できなかったのでコメントアウト //// LineLive //else if (message is ILineLiveMessage lineLiveMessage) //{ // name = "(運営)"; // cmntSource = "Linelive"; // switch (lineLiveMessage.LineLiveMessageType) // { // case LineLiveMessageType.Connected: // // name = null; // comment = (lineLiveMessage as ILineLiveConnected).Text; // break; // case LineLiveMessageType.Disconnected: // // name = null; // comment = (lineLiveMessage as ILineLiveDisconnected).Text; // break; // case LineLiveMessageType.Comment: // name = (lineLiveMessage as ILineLiveComment).DisplayName; // comment = (lineLiveMessage as ILineLiveComment).Text; // break; // } //} //// Mildom //else if (message is IMildomMessage MildomMessage) //{ // name = "(運営)"; // cmntSource = "Mildom"; // switch (MildomMessage.MildomMessageType) // { // case MildomMessageType.Connected: // // name = null; // comment = (MildomMessage as IMildomConnected).Text; // break; // case MildomMessageType.Disconnected: // // name = null; // comment = (MildomMessage as IMildomDisconnected).Text; // break; // case MildomMessageType.Comment: // name = (MildomMessage as IMildomComment).UserName; // comment = (MildomMessage as IMildomComment).CommentItems.ToText(); // break; // case MildomMessageType.JoinRoom: // // name = null; // comment = (MildomMessage as IMildomJoinRoom).CommentItems.ToText(); // break; // //case MildomMessageType.Leave: // // name = null; // // comment = (MildomMessage as IMildomLeave).CommentItems.ToText(); // // break; // } //} // YouTube Live SC 等改行が入ることがある \r 置換が有効 // コメント中の「'」に要注意 's など英語コメントでよく入る comment = comment.Replace("\n", " ").Replace("\r", " ").Replace("\'", "’").Replace("\"", "”").Replace("\\", "\"); comment = comment.Replace("$", "$").Replace("/", "/").Replace(",", ","); name = name.Replace("\n", " ").Replace("\r", " ").Replace("\'", "’").Replace("\"", "”").Replace("\\", "\"); name = name.Replace("$", "$").Replace("/", "/").Replace(",", ","); // 念のため if (name == null) { name = "(名前なし)"; } if (comment == null) { comment = "(本文なし)"; } if (cmntSource == null) { cmntSource = "Unknown"; } return(name, comment, cmntSource); }
public void OnMessageReceived(ISiteMessage message, IMessageMetadata messageMetadata) { if (!_options.IsEnabled || messageMetadata.IsNgUser || messageMetadata.IsInitialComment || (messageMetadata.Is184 && !_options.Want184Read)) { return; } var(name, comment) = GetData(message, _options); //nameがnullでは無い場合かつUser.Nicknameがある場合はNicknameを採用 if (!string.IsNullOrEmpty(name) && messageMetadata.User != null && !string.IsNullOrEmpty(messageMetadata.User.Nickname)) { name = messageMetadata.User.Nickname; } try { //棒読みちゃんが事前に起動されていたらそれを使いたい。 //起動していなかったら起動させて、準備ができ次第それ以降のコメントを読んで貰う //とりあえず何も確認せずにコメントを送信する。起動していなかったら例外が起きる。 var dataToRead = "";//棒読みちゃんに読んでもらう文字列 if (_options.IsReadHandleName && !string.IsNullOrEmpty(name)) { dataToRead += name; if (_options.IsAppendNickTitle) { dataToRead += _options.NickTitle; } } if (_options.IsReadComment && !string.IsNullOrEmpty(comment)) { if (!string.IsNullOrEmpty(dataToRead))//空欄で無い場合、つまり名前も読み上げる場合は名前とコメントの間にスペースを入れる。こうすると名前とコメントの間で一呼吸入れてくれる { dataToRead += " "; } dataToRead += comment; } TalkText(dataToRead); } catch (System.Runtime.Remoting.RemotingException) { //多分棒読みちゃんが起動していない。 if (_bouyomiChanProcess == null && System.IO.File.Exists(_options.BouyomiChanPath)) { _bouyomiChanProcess = Process.Start(_options.BouyomiChanPath); _bouyomiChanProcess.EnableRaisingEvents = true; _bouyomiChanProcess.Exited += (s, e) => { try { _bouyomiChanProcess?.Close();//2018/03/25ここで_bouyomiChanProcessがnullになる場合があった } catch { } _bouyomiChanProcess = null; }; } //起動するまでの間にコメントが投稿されたらここに来てしまうが諦める。 } catch (Exception) { } }
public void GetSiteNameTest(ISiteMessage message, string expected) { Assert.AreEqual(expected, Tools.GetSiteName(message)); }
private static (string name, string comment) GetData(ISiteMessage message, Options options) { string name = null; string comment = null; if (false) { } else if (message is IYouTubeLiveMessage youTubeLiveMessage) { switch (youTubeLiveMessage.YouTubeLiveMessageType) { case YouTubeLiveMessageType.Connected: if (options.IsYouTubeLiveConnect) { name = null; comment = (youTubeLiveMessage as IYouTubeLiveConnected).Text; } break; case YouTubeLiveMessageType.Disconnected: if (options.IsYouTubeLiveDisconnect) { name = null; comment = (youTubeLiveMessage as IYouTubeLiveDisconnected).Text; } break; case YouTubeLiveMessageType.Comment: if (options.IsYouTubeLiveComment) { if (options.IsYouTubeLiveCommentNickname) { name = (youTubeLiveMessage as IYouTubeLiveComment).NameItems.ToText(); } if (options.IsYouTubeLiveCommentStamp) { comment = (youTubeLiveMessage as IYouTubeLiveComment).CommentItems.ToTextWithImageAlt(); } else { comment = (youTubeLiveMessage as IYouTubeLiveComment).CommentItems.ToText(); } } break; case YouTubeLiveMessageType.Superchat: if (options.IsYouTubeLiveSuperchat) { var superChat = youTubeLiveMessage as IYouTubeLiveSuperchat; if (options.IsYouTubeLiveSuperchatNickname) { name = superChat.NameItems.ToText(); } //TODO:superchat中のスタンプも読ませるべきでは? var text = superChat.CommentItems.ToText(); var amount = superChat.PurchaseAmount; comment = amount + Environment.NewLine + text; } break; case YouTubeLiveMessageType.Membership: if (options.IsYouTubeLiveMembership) { var membership = youTubeLiveMessage as IYouTubeLiveMembership; if (options.IsYouTubeLiveMembershipNickname) { name = membership.NameItems.ToText(); } comment = membership.CommentItems.ToText(); } break; } } else if (message is IOpenrecMessage openrecMessage) { switch (openrecMessage.OpenrecMessageType) { case OpenrecMessageType.Connected: if (options.IsOpenrecConnect) { name = null; comment = (openrecMessage as IOpenrecConnected).Text; } break; case OpenrecMessageType.Disconnected: if (options.IsOpenrecDisconnect) { name = null; comment = (openrecMessage as IOpenrecDisconnected).Text; } break; case OpenrecMessageType.Comment: if (options.IsOpenrecComment) { if (options.IsOpenrecCommentNickname) { name = (openrecMessage as IOpenrecComment).NameItems.ToText(); } comment = (openrecMessage as IOpenrecComment).MessageItems.ToText(); } break; } } else if (message is IMixchMessage mixchMessage) { switch (mixchMessage.MixchMessageType) { case MixchMessageType.Comment: if (options.IsMixchComment && (!options.IsMixchCommentOnlyFirst || mixchMessage.IsFirstComment)) { if (options.IsMixchCommentNickname) { name = mixchMessage.NameItems.ToText(); } comment = mixchMessage.MessageItems.ToText(); } break; case MixchMessageType.SuperComment: case MixchMessageType.Stamp: case MixchMessageType.PoiPoi: case MixchMessageType.Item: case MixchMessageType.CoinBox: if (options.IsMixchItem) { if (options.IsMixchItemNickname) { name = mixchMessage.NameItems.ToText(); } comment = mixchMessage.MessageItems.ToText(); } break; case MixchMessageType.Share: case MixchMessageType.EnterNewbie: case MixchMessageType.EnterLevel: case MixchMessageType.Follow: case MixchMessageType.EnterFanclub: if (options.IsMixchSystem) { comment = mixchMessage.MessageItems.ToText(); } break; } } else if (message is ITwitchMessage twitchMessage) { switch (twitchMessage.TwitchMessageType) { case TwitchMessageType.Connected: if (options.IsTwitchConnect) { name = null; comment = (twitchMessage as ITwitchConnected).Text; } break; case TwitchMessageType.Disconnected: if (options.IsTwitchDisconnect) { name = null; comment = (twitchMessage as ITwitchDisconnected).Text; } break; case TwitchMessageType.Comment: if (options.IsTwitchComment) { if (options.IsTwitchCommentNickname) { name = (twitchMessage as ITwitchComment).DisplayName; } comment = (twitchMessage as ITwitchComment).CommentItems.ToText(); } break; } } else if (message is INicoMessage NicoMessage) { switch (NicoMessage.NicoMessageType) { case NicoMessageType.Connected: if (options.IsNicoConnect) { name = null; comment = (NicoMessage as INicoConnected).Text; } break; case NicoMessageType.Disconnected: if (options.IsNicoDisconnect) { name = null; comment = (NicoMessage as INicoDisconnected).Text; } break; case NicoMessageType.Comment: if (options.IsNicoComment) { if (options.IsNicoCommentNickname) { name = (NicoMessage as INicoComment).UserName; } comment = (NicoMessage as INicoComment).Text; } break; case NicoMessageType.Item: if (options.IsNicoItem) { if (options.IsNicoItemNickname) { //name = (NicoMessage as INicoItem).NameItems.ToText(); } comment = (NicoMessage as INicoGift).Text; } break; case NicoMessageType.Ad: if (options.IsNicoAd) { name = null; comment = (NicoMessage as INicoAd).Text; } break; case NicoMessageType.Spi: if (options.IsNicoSpi) { name = null; comment = (NicoMessage as INicoSpi).Text; } break; } } else if (message is ITwicasMessage twicasMessage) { switch (twicasMessage.TwicasMessageType) { case TwicasMessageType.Connected: if (options.IsTwicasConnect) { name = null; comment = (twicasMessage as ITwicasConnected).Text; } break; case TwicasMessageType.Disconnected: if (options.IsTwicasDisconnect) { name = null; comment = (twicasMessage as ITwicasDisconnected).Text; } break; case TwicasMessageType.Comment: if (options.IsTwicasComment) { if (options.IsTwicasCommentNickname) { name = (twicasMessage as ITwicasComment).UserName; } comment = (twicasMessage as ITwicasComment).CommentItems.ToText(); } break; case TwicasMessageType.Item: if (options.IsTwicasItem) { if (options.IsTwicasItemNickname) { name = (twicasMessage as ITwicasItem).UserName; } comment = (twicasMessage as ITwicasItem).CommentItems.ToTextWithImageAlt(); } break; } } else if (message is ILineLiveMessage lineLiveMessage) { switch (lineLiveMessage.LineLiveMessageType) { case LineLiveMessageType.Connected: if (options.IsLineLiveConnect) { name = null; comment = (lineLiveMessage as ILineLiveConnected).Text; } break; case LineLiveMessageType.Disconnected: if (options.IsLineLiveDisconnect) { name = null; comment = (lineLiveMessage as ILineLiveDisconnected).Text; } break; case LineLiveMessageType.Comment: if (options.IsLineLiveComment) { if (options.IsLineLiveCommentNickname) { name = (lineLiveMessage as ILineLiveComment).DisplayName; } comment = (lineLiveMessage as ILineLiveComment).Text; } break; } } else if (message is IWhowatchMessage whowatchMessage) { switch (whowatchMessage.WhowatchMessageType) { case WhowatchMessageType.Connected: if (options.IsWhowatchConnect) { name = null; comment = (whowatchMessage as IWhowatchConnected).Text; } break; case WhowatchMessageType.Disconnected: if (options.IsWhowatchDisconnect) { name = null; comment = (whowatchMessage as IWhowatchDisconnected).Text; } break; case WhowatchMessageType.Comment: if (options.IsWhowatchComment) { if (options.IsWhowatchCommentNickname) { name = (whowatchMessage as IWhowatchComment).UserName; } comment = (whowatchMessage as IWhowatchComment).Comment; } break; case WhowatchMessageType.Item: if (options.IsWhowatchItem) { if (options.IsWhowatchItemNickname) { name = (whowatchMessage as IWhowatchItem).UserName; } comment = (whowatchMessage as IWhowatchItem).Comment; } break; } } else if (message is IMirrativMessage mirrativMessage) { switch (mirrativMessage.MirrativMessageType) { case MirrativMessageType.Connected: if (options.IsMirrativConnect) { name = null; comment = (mirrativMessage as IMirrativConnected).Text; } break; case MirrativMessageType.Disconnected: if (options.IsMirrativDisconnect) { name = null; comment = (mirrativMessage as IMirrativDisconnected).Text; } break; case MirrativMessageType.Comment: if (options.IsMirrativComment) { if (options.IsMirrativCommentNickname) { name = (mirrativMessage as IMirrativComment).UserName; } comment = (mirrativMessage as IMirrativComment).Text; } break; case MirrativMessageType.JoinRoom: if (options.IsMirrativJoinRoom) { name = null; comment = (mirrativMessage as IMirrativJoinRoom).Text; } break; case MirrativMessageType.Item: if (options.IsMirrativItem) { name = null; comment = (mirrativMessage as IMirrativItem).Text; } break; } } else if (message is IPeriscopeMessage PeriscopeMessage) { switch (PeriscopeMessage.PeriscopeMessageType) { case PeriscopeMessageType.Connected: if (options.IsPeriscopeConnect) { name = null; comment = (PeriscopeMessage as IPeriscopeConnected).Text; } break; case PeriscopeMessageType.Disconnected: if (options.IsPeriscopeDisconnect) { name = null; comment = (PeriscopeMessage as IPeriscopeDisconnected).Text; } break; case PeriscopeMessageType.Comment: if (options.IsPeriscopeComment) { if (options.IsPeriscopeCommentNickname) { name = (PeriscopeMessage as IPeriscopeComment).DisplayName; } comment = (PeriscopeMessage as IPeriscopeComment).Text; } break; case PeriscopeMessageType.Join: if (options.IsPeriscopeJoin) { name = null; comment = (PeriscopeMessage as IPeriscopeJoin).Text; } break; case PeriscopeMessageType.Leave: if (options.IsPeriscopeLeave) { name = null; comment = (PeriscopeMessage as IPeriscopeLeave).Text; } break; } } else if (message is IMildomMessage MildomMessage) { switch (MildomMessage.MildomMessageType) { case MildomMessageType.Connected: if (options.IsMildomConnect) { name = null; comment = (MildomMessage as IMildomConnected).Text; } break; case MildomMessageType.Disconnected: if (options.IsMildomDisconnect) { name = null; comment = (MildomMessage as IMildomDisconnected).Text; } break; case MildomMessageType.Comment: if (options.IsMildomComment) { if (options.IsMildomCommentNickname) { name = (MildomMessage as IMildomComment).UserName; } comment = (MildomMessage as IMildomComment).CommentItems.ToText(); } break; case MildomMessageType.JoinRoom: if (options.IsMildomJoin) { name = null; comment = (MildomMessage as IMildomJoinRoom).CommentItems.ToText(); } break; //case MildomMessageType.Leave: // if (_options.IsMildomLeave) // { // name = null; // comment = (MildomMessage as IMildomLeave).CommentItems.ToText(); // } // break; } } else if (message is IShowRoomMessage showroomMessage) { switch (showroomMessage.ShowRoomMessageType) { case ShowRoomMessageType.Comment: if (options.IsShowRoomComment) { if (options.IsShowRoomCommentNickname) { name = (showroomMessage as IShowRoomComment).UserName; } comment = (showroomMessage as IShowRoomComment).Text; } break; default: break; } } else if (message is IBigoMessage bigoMessage) { switch (bigoMessage.BigoMessageType) { case BigoMessageType.Comment: if (options.IsBigoLiveComment) { if (options.IsBigoLiveCommentNickname) { name = (bigoMessage as IBigoComment).Name; } comment = (bigoMessage as IBigoComment).Message; } break; default: break; } } else { } return(name, comment); }
public static (string name, string comment) GetData(ISiteMessage message) { string name = null; string comment = null; //if (message is YouTubeLiveSitePlugin.IYouTubeLiveMessage ytMessage) //{ if (message is YouTubeLiveSitePlugin.IYouTubeLiveComment ytComment) { comment = ytComment.CommentItems.ToText(); name = ytComment.NameItems.ToText(); } else if (message is YouTubeLiveSitePlugin.IYouTubeLiveSuperchat superchat) { var s = superchat.PurchaseAmount; var text = superchat.CommentItems.ToText(); if (!string.IsNullOrEmpty(text)) { s += Environment.NewLine + text; } comment = s; name = superchat.NameItems.ToText(); } //} //else if (message is NicoSitePlugin.INicoMessage nicoMessage) //{ else if (message is NicoSitePlugin.INicoComment nicoComment) { comment = nicoComment.Text; name = nicoComment.UserName; } else if (message is NicoSitePlugin.INicoGift nicoItem) { comment = nicoItem.Text; //name = nicoItem.; } else if (message is NicoSitePlugin.INicoAd nicoAd) { comment = nicoAd.Text; //name = nicoItem.; } else if (message is NicoSitePlugin.INicoSpi nicoSpi) { comment = nicoSpi.Text; //name = nicoItem.; } else if (message is NicoSitePlugin.INicoEmotion nicoEmotion) { comment = nicoEmotion.Content; //name = nicoItem.; } //} //else if (message is TwitchSitePlugin.ITwitchMessage twMessage) //{ else if (message is TwitchSitePlugin.ITwitchComment twComment) { comment = twComment.CommentItems.ToText(); name = twComment.DisplayName; } //} //else if (message is TwicasSitePlugin.ITwicasMessage casMessage) //{ else if (message is TwicasSitePlugin.ITwicasComment casComment) { comment = casComment.CommentItems.ToText(); name = casComment.UserName; } else if (message is TwicasSitePlugin.ITwicasKiitos casKiitos) { comment = casKiitos.CommentItems.ToText(); name = casKiitos.UserName; } else if (message is TwicasSitePlugin.ITwicasItem casItem) { comment = casItem.CommentItems.ToText(); name = casItem.UserName; } //} //else if (message is WhowatchSitePlugin.IWhowatchMessage wwMessage) //{ else if (message is WhowatchSitePlugin.IWhowatchComment wwComment) { comment = wwComment.Comment; name = wwComment.UserName; } else if (message is WhowatchSitePlugin.IWhowatchItem wwItem) { comment = wwItem.Comment; name = wwItem.UserName; } //} //else if (message is OpenrecSitePlugin.IOpenrecMessage opMessage) //{ else if (message is OpenrecSitePlugin.IOpenrecComment opComment) { comment = opComment.MessageItems.ToText(); name = opComment.NameItems.ToText(); } //} //else if (message is MixchSitePlugin.IMixchMessage opMessage) //{ else if (message is MixchSitePlugin.IMixchMessage mxMessage) { comment = mxMessage.MessageItems.ToText(); name = mxMessage.NameItems.ToText(); } //} //else if (message is MirrativSitePlugin.IMirrativMessage mrMessage) //{ else if (message is MirrativSitePlugin.IMirrativComment mrComment) { comment = mrComment.Text; name = mrComment.UserName; } else if (message is MirrativSitePlugin.IMirrativJoinRoom mrJoin) { comment = mrJoin.Text; name = mrJoin.UserName; } //} //else if (message is LineLiveSitePlugin.ILineLiveMessage lineLiveMessage) //{ else if (message is LineLiveSitePlugin.ILineLiveComment llComment) { comment = llComment.Text; name = llComment.DisplayName; } //} //else if (message is PeriscopeSitePlugin.IPeriscopeMessage psMessage) //{ else if (message is PeriscopeSitePlugin.IPeriscopeComment psComment) { comment = psComment.Text; name = psComment.DisplayName; } else if (message is ShowRoomSitePlugin.IShowRoomComment srComment) { comment = srComment.Text; name = srComment.UserName; } //} //else if (message is MildomSitePlugin.IMildomMessage mildomMessage) //{ else if (message is MildomSitePlugin.IMildomComment mildomComment) { comment = mildomComment.CommentItems.ToText(); name = mildomComment.UserName; } //} else if (message is BigoSitePlugin.IBigoComment bgComment) { comment = bgComment.Message; name = bgComment.Name; } return(name, comment); }
public MessageContext(ISiteMessage message, IMessageMetadata metadata, IMessageMethods methods) { Message = message; Metadata = metadata; Methods = methods; }