private void IRCOnOnChannelMessage(object sender, IrcEventArgs ircEventArgs) { //TODO: Find out how to say stuff without resorting to renaming players switch (ircEventArgs.Data.Message) { case "!players": BuildScores(); break; default: foreach (var player in Players) { var name = player.GetField <string>("name"); player.SetField("name", "^8[IRC] " + ircEventArgs.Data.Nick); player.Call("sayall", ircEventArgs.Data.Message); player.SetField("name", name); break; } break; } }
private void session_RawMessageReceived(object sender, IrcEventArgs e) { if (e.Message.Command == "PRIVMSG" && e.Message.Parameters.Count == 2 && (!CtcpCommand.IsCtcpCommand(e.Message.Parameters[1]) || CtcpCommand.Parse(e.Message.Parameters[1]).Command == "ACTION")) { var target = new IrcTarget(e.Message.Parameters[0]); if (App.IsIgnoreMatch(e.Message.From, target.IsChannel ? IgnoreActions.Channel : IgnoreActions.Private)) { return; } if (!target.IsChannel && e.Message.From is IrcPeer) { if (App.Create(sender as IrcSession, new IrcTarget((IrcPeer)e.Message.From), false) && _notifyIcon != null && _notifyIcon.IsVisible) { _notifyIcon.Show("IRC Message", string.Format("You received a message from {0}.", ((IrcPeer)e.Message.From).Nickname)); } } } }
void OnMessage(object sender, IrcEventArgs e) { if (e.Data.Channel == channel) { if (e.Data.Message.StartsWith("!lazor ")) { //authenticate if (OpList != null && OpList.ContainsKey(e.Data.Nick)) { List <string> pars = new List <string>(e.Data.Message.Split(' ')); SetStatus("Controlled by " + e.Data.Nick); try { txtTargetIP.Invoke(new CheckParamsDelegate(CheckParams), pars); } catch { } } } } }
private void ResetHandler(object sender, IrcEventArgs e) { var sendto = (string.IsNullOrEmpty(e.Data.Channel)) ? e.Data.Nick : e.Data.Channel; if (e.Data.MessageArray.Length < 2) { BotMethods.SendMessage(SendType.Message, sendto, "Too few arguments! Try '!help !tweet-reset'."); } TwitterWrapper account; if (twitterAccounts.TryGetValue(e.Data.MessageArray[1].ToLower(), out account)) { account.ResetToken(); BotMethods.SendMessage(SendType.Message, sendto, "Feed '{0}' successfully reset. Please go to {1} validate account and activate account by !tweet-pin {0} <pin>".Fill(account.FriendlyName, account.AuthenticationUrl)); } else { BotMethods.SendMessage(SendType.Message, sendto, "No account with name '{0}'.".Fill(e.Data.MessageArray[1].ToLower())); } }
private void PartCommand(object sender, IrcEventArgs e) { var sendto = (string.IsNullOrEmpty(e.Data.Channel)) ? e.Data.Nick : e.Data.Channel; if (e.Data.MessageArray.Length < 2) { SendMessage(SendType.Message, sendto, "Too few arguments! Try !help."); return; } RfcPart(e.Data.Message.Substring(6)); var channel = MainBotData.Channels.Where(c => c.ChannelName == e.Data.MessageArray[1]).FirstOrDefault(); if (channel != null) { MainBotData.Channels.DeleteOnSubmit(channel); MainBotData.SubmitChanges(); } }
private void TweetStatsHandler(object sender, IrcEventArgs e) { string sendto = (string.IsNullOrEmpty(e.Data.Channel)) ? e.Data.Nick : e.Data.Channel; if (e.Data.MessageArray.Length < 2) { BotMethods.SendMessage(SendType.Message, sendto, "Too few arguments for 'add'! Try '!help !tweet-stats'."); return; } if (twitterAccounts.ContainsKey(e.Data.MessageArray[1].ToLower())) { var user = twitterAccounts[e.Data.MessageArray[1].ToLower()].GetStats(); BotMethods.SendMessage(SendType.Message, sendto, "Followers: {0}, Friends: {1}, Statuses: {2}, -> {3}" .Fill(user.FollowersCount, user.FriendsCount, user.StatusesCount, user.Url)); } else { BotMethods.SendMessage(SendType.Message, sendto, "I dont know a tweet with the name: {0}.".Fill(e.Data.MessageArray[1].ToLower())); } }
private void JoinCommand(object sender, IrcEventArgs e) { var sendto = (string.IsNullOrEmpty(e.Data.Channel)) ? e.Data.Nick : e.Data.Channel; if (e.Data.MessageArray.Length < 2) { SendMessage(SendType.Message, sendto, "Too few arguments! Try !help."); return; } foreach (var channel in e.Data.MessageArray.Skip(1).Where(channel => !channel.IsNullOrEmpty())) { RfcJoin(channel); var chan = new Channel { ChannelName = channel }; MainBotData.Channels.InsertOnSubmit(chan); MainBotData.SubmitChanges(); } Settings.Default.Save(); }
private void IrcClientOnOnChannelMessage(object sender, IrcEventArgs ircEventArgs) { //Irc4net does not trim whitespace so we do that manually and then build a new array from that var text = ircEventArgs.Data.Message.Trim(); var textArray = text.Split(' '); var m = new IrcMessage { Channel = ircEventArgs.Data.Channel, Sender = ircEventArgs.Data.Nick, Server = _server, Text = text, TextArray = textArray }; if (OnChannelMessage != null) { ThreadStart threadStart = () => OnChannelMessage(sender, this, m); new Thread(threadStart).Start(); } }
public void OnChannelMessage(object sender, IrcEventArgs e) { Console.WriteLine($"[{e.Data.Channel}] {e.Data.Nick} : {e.Data.Message}"); // Multiplay Parsing if (e.Data.Nick.ToLower() == "banchobot") { BanchoBotParser bparser = new BanchoBotParser(e.Data.Message); bparser.Parse(); switch (bparser.Type) { case BanchoBotParseType.BEATMAP_CHANGED: if (bparser.Result as string == "0") { return; // Skip if map is not submitted. } // todo get beatmap object from beatmap id. irc.SendMessage(SendType.Message, e.Data.Channel, $"Bloodcat mirror: {new UrlMessage("here", $"https://bloodcat.com/osu/b/{bparser.Result as string}")}"); break; } } }
private void logMessage(IrcEventArgs e) { try { using (var DB = new internetEntities()) { irkki testRow = new irkki { viesti = e.Data.Message, nick = e.Data.Nick, kanava = e.Data.Channel, aika = DateTime.Now, maara = 1 }; DB.irkki.Add(testRow); DB.SaveChanges(); } } catch (Exception eip) { } }
//Käsittelee ja parsii kanavalle tulleen viestin. private botCommands parseCommand(IrcEventArgs e, out string like, bool privMessage = false) { like = ""; try { like = ""; string message = e.Data.Message; string[] splitted = e.Data.MessageArray; if (splitted.Length > 0) { botCommands comType = get_command_type(splitted[0]); if (comType == botCommands.random || comType == botCommands.random_old) { if (!privMessage) { like = get_like(message, splitted[0]); } else { like = get_like(message, splitted[1]); } } else { if (!privMessage && splitted.Length >= 2) { like = splitted[1]; } else if (privMessage && splitted.Length >= 3) { like = splitted[2]; } } return(comType); } return(botCommands.unknown); } catch (Exception eee) { return(botCommands.unknown); } }
public static void OnQueryMessage(object sender, IrcEventArgs e) { if (e.Data.From == "[email protected]") { System.Console.WriteLine("[" + DateTime.Now.ToString("HH:mm:ss") + "] Query: " + e.Data.Nick + " | " + e.Data.Message); switch (e.Data.MessageArray[0]) { case "host": irc.SendMessage(SendType.Message, e.Data.Nick, "e.Data.From: " + e.Data.From); irc.SendMessage(SendType.Message, e.Data.Nick, "e.Data.Host: " + e.Data.Host); irc.SendMessage(SendType.Message, e.Data.Nick, "e.Data.Ident: " + e.Data.Ident); irc.SendMessage(SendType.Message, e.Data.Nick, "e.Data.Nick: " + e.Data.Nick); break; case "join": irc.RfcJoin(e.Data.MessageArray[1]); break; case "leave": case "part": irc.RfcPart(e.Data.MessageArray[1]); break; case "die": Exit(); break; case "add": if (e.Data.MessageArray.Length > 1) { RandomDogFromFile.Add(e.Data.MessageArray[1]); } break; } } else { irc.SendMessage(SendType.Message, e.Data.Nick, "Bark! You are not my owner."); } }
private void DeactivateCommand(object sender, IrcEventArgs e) { var sendto = (string.IsNullOrEmpty(e.Data.Channel)) ? e.Data.Nick : e.Data.Channel; if (e.Data.MessageArray.Length < 2) { SendMessage(SendType.Message, sendto, "Too few arguments! Try !help."); return; } var calledPlugins = new List <AbstractPlugin>(); foreach (AbstractPlugin plugin in e.Data.MessageArray.Skip(1).Select(p => new Wildcard(p)).SelectMany(wildcard => PlugManager.Plugins.Where(p => wildcard.IsMatch(p.FullName) || wildcard.IsMatch(p.MainClass)))) { if (plugin.Active) { var plugs = MainBotData.Plugin.Where(p => p.PluginName == plugin.FullName).ToArray(); MainBotData.Plugin.DeleteAllOnSubmit(plugs); plugin.Deactivate(); var plug = plugin; foreach (var command in (from commandlet in commands let abstractPlugin = commandlet.Value.Owner as string let command = commandlet.Key where abstractPlugin != null && abstractPlugin == plug.FullName select command).ToList()) { commands.Remove(command); Log.Instance.Log("BUG in Plugin: Forcefully deactivated Command '{0}' in Plugin {1}.".Fill(command, plugin.FullName), Level.Warning); } } calledPlugins.Add(plugin); } MainBotData.SubmitChanges(); foreach (var line in calledPlugins.Select(plugin => "" + plugin.FullName + " [" + ((plugin.Active ? IrcConstants.IrcColor + "" + (int)IrcColors.LightGreen + "ON" : IrcConstants.IrcColor + "" + (int)IrcColors.LightRed + "OFF")) + IrcConstants.IrcColor + "]").ToLines(350, ", ", "Plugins: ", " END.")) { SendMessage(SendType.Message, sendto, line); } }
//Retrieves an imagelink, matching the tag and provider given public void DoBooru(IrcEventArgs e, List <string> tags, string channel) { //we know the first word is booru //we remove the booru command tags.Remove(tags[0]); //now we see if we got a provider given //the provider would be the first word after booru, booru was removed //if we get one we remove it string provider = ""; switch (tags[0]) { case "SANKAKU": provider = tags[0]; tags.Remove(tags[0]); break; case "DANBOORU": provider = tags[0]; tags.Remove(tags[0]); break; default: break; } //safety check that there are still tags left, e.g. .booru sankaku would be empty now if (tags.Count == 0) { return; } //now the other words all count as tags string fileUrl = BooruHandler.GetFileLink(tags, provider); mainIRCClient.SendMessage(SendType.Message, channel, fileUrl); }
private void TranslateTrigger(object sender, IrcEventArgs e) { if (e.Data.MessageArray.Length > 1) { if ((e.Data.MessageArray[1].ToLower() == "off") || (e.Data.MessageArray[1].ToLower() == "end")) { EndTranslate(e.Data.Nick, e.Data.Channel); } if (activeTranslations.Select("(Nick='" + e.Data.Nick + "') AND (Channel='" + e.Data.Channel + "')").Length > 0) { EndTranslate(e.Data.Nick, e.Data.Channel); BotMethods.SendMessage(SendType.Notice, e.Data.Nick, "" + IrcConstants.IrcBold + IrcConstants.IrcColor + (int)IrcColors.Brown + "You requested more than one language translation in a channel: the old request was canceled."); } if (languages.ContainsKey(e.Data.MessageArray[1])) { DataRow dr = activeTranslations.NewRow(); dr["Nick"] = e.Data.Nick; dr["Channel"] = e.Data.Channel; dr["Language"] = e.Data.MessageArray[1]; activeTranslations.Rows.Add(dr); } if (languages.ContainsValue(e.Data.MessageArray[1])) { foreach (KeyValuePair <string, string> kvp in languages) { if (kvp.Value.ToLower() == e.Data.MessageArray[1].ToLower()) { DataRow dr = activeTranslations.NewRow(); dr["Nick"] = e.Data.Nick; dr["Channel"] = e.Data.Channel; dr["Language"] = kvp.Key; activeTranslations.Rows.Add(dr); break; } } } } }
protected internal void IRC_OnChannelMessage(object sender, IrcEventArgs e) { IrcMessageData data = e.Data; if (ircClient.IsMe(data.Nick)) { return; } if (data.Message.Contains("[off]")) { return; } string nick = data.Nick + " " + data.Channel.Substring(1); UUID id = UUID.Zero; lock (IrcUUIDs) { if (!IrcUUIDs.TryGetValue(nick, out id)) { id = IrcUUIDs[nick] = UUID.Random(); WorldObjects.DeclareGeneric(nick, id, "IrcUser"); } } RelayToSim(nick, data.Message); try { Client.FakeEvent(Client.Self, "m_Chat", this, new ChatEventArgs(Client.Network.CurrentSim, data.Message, ChatAudibleLevel.Fully, ChatType.Normal, ChatSourceType.Agent, nick, id, id, Vector3.Zero)); } catch (NotSupportedException exception) { } catch (Exception exception) { Console.WriteLine("ChatFromSimulator: " + exception); } }
/// <summary> /// Called when a channel the bot is in recieves a message /// </summary> /// <param name="sender">The sender of the event (usually <see cref="irc"/>)</param> /// <param name="e">The <see cref="IrcEventArgs"/></param> private void Irc_OnChannelMessage(object sender, IrcEventArgs e) { var formattedMessage = e.Data.Message.Trim(); var splits = new List <string>(formattedMessage.Split(' ')); var test = splits[0]; if (test.Length > 1 && (test[test.Length - 1] == ':' || test[test.Length - 1] == ',')) { test = test.Substring(0, test.Length - 1); } test = test.ToLower(); if (test != irc.Nickname.ToLower() && test != "!tgs") { return; } splits.RemoveAt(0); formattedMessage = String.Join(" ", splits); OnChatMessage(this, e.Data.Nick, e.Data.Channel, formattedMessage, CheckAdmin(e.Data), IRCConfig.AdminChannels.Contains(e.Data.Channel.ToLower())); }
private void ShowRss(object sender, IrcEventArgs e) { var sendto = (string.IsNullOrEmpty(e.Data.Channel)) ? e.Data.Nick : e.Data.Channel; if (e.Data.MessageArray.Length < 2) { foreach (string line in rssFeeds.Select(item => item.Value.FriendlyName).ToLines(350, ", ", "Currently checked feeds: ", ".")) { BotMethods.SendMessage(SendType.Message, sendto, line); } return; } if (e.Data.MessageArray.Length < 3) { if (rssFeeds.ContainsKey(e.Data.MessageArray[1].ToLower())) { var rssFeed = rssFeeds[e.Data.MessageArray[1].ToLower()]; BotMethods.SendMessage(SendType.Message, sendto, "Feed '{0}' has {1} Elements, last post was on: {2}.".Fill(rssFeed.FriendlyName, rssFeed.Count, rssFeed.Last)); } else { BotMethods.SendMessage(SendType.Message, sendto, "Feed '{0}' does not exists! Try '!rss'.".Fill(e.Data.MessageArray[1].ToLower())); } return; } if (rssFeeds.ContainsKey(e.Data.MessageArray[1].ToLower())) { var rssFeed = rssFeeds[e.Data.MessageArray[1].ToLower()]; int index; if (int.TryParse(e.Data.MessageArray[2], out index)) { SendFormattedItem(rssFeed, rssFeed[index], sendto); } } else { BotMethods.SendMessage(SendType.Message, sendto, "Feed '{0}' does not exists! Try '!rss'.".Fill(e.Data.MessageArray[1].ToLower())); } }
public void RunCommand(IrcClient client, GroupCollection values, IrcEventArgs eventArgs, IrcBot ircBot) { string channel = values[1].Value; if (!client.IsJoined(channel)) { _log.Info($"Attempted to roll up {channel}, but not in it."); client.SendMessage(SendType.Message, eventArgs.Data.Channel, $"Not in channel {channel}"); return; } _log.Info($"Rolling up {channel}"); List <NonRfcChannelUser> users = client.GetChannel(channel).Users.Values.Cast <NonRfcChannelUser>().Where(user => !user.IsChannelAdmin && !user.IsHalfop && !user.IsOwner && !user.IsVoice).ToList(); if (users.Count == 0) { client.SendMessage(SendType.Message, eventArgs.Data.Channel, "No users to voice."); return; } string[] usersToVoice = users.Select(user => user.Nick).ToArray(); _log.Info($"Voicing {usersToVoice.Length} users."); client.Voice(channel, usersToVoice); }
private Role GetRoleFromTags(IrcEventArgs e) { if (ActiveChannels[e.Data.Channel].IsSuperMod(e.Data.Nick)) { return(Role.SuperMod); } else { if (e.Data.Tags != null) { //Ref: https://dev.twitch.tv/docs/irc/tags/ if (e.Data.Tags.ContainsKey("badges") && e.Data.Tags["badges"].Contains("broadcaster/1")) { return(Role.SuperMod); } if (e.Data.Tags.ContainsKey("mod") && e.Data.Tags["mod"] == "1") { return(Role.Mod); } else if (e.Data.Tags.ContainsKey("badges") && e.Data.Tags["badges"].Contains("vip/1")) { return(Role.VIP); } else if (e.Data.Tags.ContainsKey("badges") && e.Data.Tags["badges"].Contains("subscriber/1")) { return(Role.Subscriber); } else { return(Role.User); } } else { return(Role.User); } } }
public void RunCommand(IrcClient client, GroupCollection values, IrcEventArgs eventArgs, IrcBot ircBot) { RandomKickConfigModel config = ConfigHelpers.LoadConfig <RandomKickConfigModel>(ConfigHelpers.ConfigPaths.RandomKickConfig); if (!config.Enabled) { return; } RandomKickConfigModel.RandomKickTarget target = config.Targets.FirstOrDefault(t => t.Nick == eventArgs.Data.From.GetNick()); if (target == null) { return; } // Adding the target chance is just so that it doesn't end up with negative numbers // I don't know if negatives would be an issue but let's not find out the hard way int rangeBase = new Random(Guid.NewGuid().GetHashCode()).Next(0 + target.Chance, config.ChanceThreshold + target.Chance); int chance = new Random(Guid.NewGuid().GetHashCode()).Next(0 + target.Chance, config.ChanceThreshold + target.Chance); _log.Debug($"Got range {rangeBase} and chance {chance} for kicking {eventArgs.Data.From.GetNick()} in {eventArgs.Data.Channel}, their configured chance is {target.Chance}"); _log.Debug($"Range for {chance} to fall in is {rangeBase - (target.Chance / 2)}-{rangeBase + (target.Chance / 2)}"); if (chance >= rangeBase - (target.Chance / 2) && chance <= rangeBase + (target.Chance / 2)) { string message = config.MessageList[new Random(Guid.NewGuid().GetHashCode()).Next(0, config.MessageList.Count - 1)]; _log.Info($"Going to kick {eventArgs.Data.From} now"); client.RfcKick(eventArgs.Data.Channel, eventArgs.Data.From.GetNick(), message); } }
private void PosterStats(IrcEventArgs e) { int posts = 0, lines = 0; var groups = new Dictionary <string, int>(); Article lastArticle = null; string lastGroup = "no group"; foreach (KeyValuePair <string, Dictionary <string, Article> > group in nntpCache) { foreach (var article in group.Value.Where(article => article.Value.Header.From.Split(new[] { '@' })[0] == e.Data.MessageArray[1])) { posts++; lines += article.Value.Header.LineCount; if (!groups.ContainsKey(group.Key)) { groups.Add(group.Key, 0); } groups[group.Key]++; if (lastArticle == null || article.Value.Header.Date > lastArticle.Header.Date) { lastArticle = article.Value; lastGroup = group.Key; } } } if (posts > 0) { if (lastArticle != null) { var t = (DateTime.Now - lastArticle.Header.Date); BotMethods.SendMessage(SendType.Message, e.Data.Channel, "Poster " + e.Data.MessageArray[1] + " has posted " + posts + " times, in " + groups.Count + " groups and wrote " + lines + " lines of text. Last post: " + IrcConstants.IrcBold + lastArticle.Header.Subject + IrcConstants.IrcBold + " in Board " + lastGroup + " (" + Math.Round(t.TotalHours) + " hours ago)"); } } else { BotMethods.SendMessage(SendType.Message, e.Data.Channel, "Poster " + e.Data.MessageArray[1] + " not found."); } }
private TwitchRightsEnum GetRoleFromTags(IrcEventArgs e) { if (irc.supermod.Contains(e.Data.Nick)) { return(TwitchRightsEnum.Admin); } else { if (e.Data.Tags != null) { //Ref: https://dev.twitch.tv/docs/irc/tags/ if (e.Data.Tags.ContainsKey("badges") && e.Data.Tags["badges"].Contains("broadcaster/1")) { return(TwitchRightsEnum.Admin); } if (e.Data.Tags.ContainsKey("mod") && e.Data.Tags["mod"] == "1") { return(TwitchRightsEnum.Mod); } else if (e.Data.Tags.ContainsKey("badges") && e.Data.Tags["badges"].Contains("vip/1")) { return(TwitchRightsEnum.TrustedSub); } else if (e.Data.Tags.ContainsKey("badges") && e.Data.Tags["badges"].Contains("subscriber/1")) { return(TwitchRightsEnum.TrustedSub); } else { return(TwitchRightsEnum.Public); } } else { return(TwitchRightsEnum.Public); } } }
void ClientOnOnChannelMessage(object sender, IrcEventArgs ircEventArgs) { string msg = ircEventArgs.Data.Message; if (msg == null) { return; } if (msg.Contains(_botNick)) { var msgHashes = GenerateMsgHashes(msg.ToLower()); var scores = new int[_responses.Count]; for (int i = 0; i < _responses.Count; i++) { scores[i] = CalculateRelevanceScore(msgHashes, _responses[i].Hashes); } var max = scores.Max(); var replyIdx = Array.IndexOf(scores, max); var replyToUse = _responses[replyIdx]; var response = replyToUse.Message.Insert(replyToUse.InsertOffset, ircEventArgs.Data.Nick); //_ircInterface.DebugLog("Response score: " + max); //var numwords = response.Split().Length; //Thread.Sleep((numwords*200)); _ircInterface.Client.SendMessage(SendType.Message, ircEventArgs.Data.Channel, response); _responses.RemoveAt(replyIdx); _responsesConsumed++; _usedResponses.Add(replyToUse); if (_usedResponses.Count > _reusePreventionSize) { _usedResponses.RemoveAt(0); } } }
private void ListUsers(object sender, IrcEventArgs e) { string sendto = (string.IsNullOrEmpty(e.Data.Channel)) ? e.Data.Nick : e.Data.Channel; if (e.Data.MessageArray.Length > 1) { if (groups.ContainsKey(EnsureGroupPrefix(e.Data.MessageArray[1]))) { foreach (string line in groups[EnsureGroupPrefix(e.Data.MessageArray[1])].ToLines(350, ", ", "Users in Group '" + EnsureGroupPrefix(e.Data.MessageArray[1]) + "': ", " END.")) { bot.SendMessage(SendType.Message, sendto, line); } } else { bot.SendMessage(SendType.Message, sendto, "No such group."); } } else { bot.SendMessage(SendType.Message, sendto, "Too few arguments! Try !help."); } }
public void RunCommand(IrcClient client, GroupCollection values, IrcEventArgs eventArgs, IrcBot ircBot) { var min = Convert.ToInt32(values[1].Value); var max = Convert.ToInt32(values[2].Value); if (min < 1) { client.SendMessage(SendType.Message, eventArgs.Data.Channel, "Min value too small"); return; } if (max > 2000) { client.SendMessage(SendType.Message, eventArgs.Data.Channel, "Max value is unreasonably large"); return; } List <int> randomValues = new List <int> { min, max }; File.WriteAllText(Path.Join("Config", "ree.json"), JsonConvert.SerializeObject(randomValues)); client.SendMessage(SendType.Message, eventArgs.Data.Channel, $"Modified ree config with {string.Join(", ", randomValues.ToArray())}"); }
public void irc_OnQueryMessage(object sender, IrcEventArgs e) { Dictionary <string, string> dictionary; if (!this.channelsText.ContainsKey(e.Data.Nick)) { this.channelsText[e.Data.Nick] = string.Empty; } else if (this.channelsText[e.Data.Nick].Length > 2) { string nick; (dictionary = this.channelsText)[nick = e.Data.Nick] = dictionary[nick] + "\r\n"; } string str = string.Format(this.DateTimeString + "{0}: {1}", e.Data.Nick, e.Data.Message); string nick2; (dictionary = this.channelsText)[nick2 = e.Data.Nick] = dictionary[nick2] + str; if (this.channelsScrolls.ContainsKey(e.Data.Nick)) { this.channelsScrolls[e.Data.Nick] = new Vector2(0f, 3.40282347E+38f); } if (!ChatRoom.IsShowing) { ChatRoom.NewMessageAvailable = true; } List <string> list = new List <string>(); list.AddRange(ChatRoom.irc.GetChannels()); for (int i = 0; i < list.Count; i++) { if (!string.IsNullOrEmpty(e.Data.Nick) && e.Data.Nick.Equals(list[i]) && this.unreadTextChannels.Length > i) { this.unreadTextChannels[i] = 1; } } ChatRoom.UpdateText = true; }
private void RemoveFact(object sender, IrcEventArgs e) { var sendto = (string.IsNullOrEmpty(e.Data.Channel)) ? e.Data.Nick : e.Data.Channel; if (e.Data.MessageArray.Length < 2) { BotMethods.SendMessage(SendType.Message, sendto, "Too few arguments for 'remove'! Try '!help !-fact'."); return; } var fact = factoidData.Facts.Where(f => f.FactKey == e.Data.MessageArray[1]).SingleOrDefault(); if (fact != null) { factoidData.Facts.DeleteOnSubmit(fact); BotMethods.SendMessage(SendType.Message, sendto, "I forgot Fact '" + fact.FactKey + "'."); factoidData.SubmitChanges(); } else { BotMethods.SendMessage(SendType.Message, sendto, "I don't know fact '" + e.Data.MessageArray[1] + "'."); } }
private static void OnChannelMessage(object sender, IrcEventArgs e) { string fakeNick, faction; string message = GetMetadata(e.Data.Message, out fakeNick, out faction); // If some cheeky m8 just sends delimiters, ignore it if (message.Length > 0) { string nick; if (fakeNick == null) { nick = e.Data.Nick; faction = crcNicks.ContainsKey(nick) ? crcNicks[nick] : "actor_stalker"; } else if (CRCOptions.ReceiveDeath && (DateTime.Now - lastDeath).TotalSeconds > CRCOptions.DeathInterval) { lastDeath = DateTime.Now; nick = e.Data.Nick; //fakeNick; } else { return; } if (message.Contains(CRCOptions.Name)) { SystemSounds.Asterisk.Play(); CRCDisplay.OnHighlightMessage(nick, message); CRCGame.OnHighlightMessage(nick, faction, message); } else { CRCDisplay.OnChannelMessage(nick, message); CRCGame.OnChannelMessage(nick, faction, message); } } }
// this method will get all IRC messages public static void OnRawMessage(object sender, IrcEventArgs e) { var nick = e.Data.Nick; var channel = e.Data.Channel; var rawmsg = e.Data.RawMessage; if (e.Data.RawMessageArray.Length > 1 && e.Data.RawMessageArray[1] == "QUIT") { OnUserQuit(nick); } System.Console.WriteLine("Received: " + e.Data.RawMessage); if (channel != null && nick != null) { // System.Console.WriteLine("channel = {0}, user = {1}, message = {2}", e.Data.Channel, e.Data.Nick, e.Data.Message); // OnChannelMessage(sender, e); } if (e.Data.RawMessage.Contains("@VERSION@")) { System.Console.WriteLine("got @VERSION@"); } }
private void Irc_Received(object sender, IrcEventArgs e) { if (e.Handled) return; switch (e.Command) { case "PRIVMSG": OnIrcPrivMsg(sender, e); break; case "NOTICE": OnIrcNotice(sender, e); break; case "001": OnIrcWelcome(sender, e); break; } }
// this method we will use to analyse queries (also known as private messages) public static void OnQueryMessage(object sender, IrcEventArgs e) { switch (e.Data.MessageArray[0]) { // debug stuff case "dump_channel": string requested_channel = e.Data.MessageArray[1]; // getting the channel (via channel sync feature) Channel channel = irc.GetChannel(requested_channel); // here we send messages irc.SendMessage(SendType.Message, e.Data.Nick, "<channel '" + requested_channel + "'>"); irc.SendMessage(SendType.Message, e.Data.Nick, "Name: '" + channel.Name + "'"); irc.SendMessage(SendType.Message, e.Data.Nick, "Topic: '" + channel.Topic + "'"); irc.SendMessage(SendType.Message, e.Data.Nick, "Mode: '" + channel.Mode + "'"); irc.SendMessage(SendType.Message, e.Data.Nick, "Key: '" + channel.Key + "'"); irc.SendMessage(SendType.Message, e.Data.Nick, "UserLimit: '" + channel.UserLimit + "'"); // here we go through all users of the channel and show their // hashtable key and nickname string nickname_list = ""; nickname_list += "Users: "; IDictionaryEnumerator it = channel.Users.GetEnumerator(); while (it.MoveNext()) { string key = (string)it.Key; ChannelUser channeluser = (ChannelUser)it.Value; nickname_list += "("; if (channeluser.IsOp) { nickname_list += "@"; } if (channeluser.IsVoice) { nickname_list += "+"; } nickname_list += ")" + key + " => " + channeluser.Nick + ", "; } irc.SendMessage(SendType.Message, e.Data.Nick, nickname_list); irc.SendMessage(SendType.Message, e.Data.Nick, "</channel>"); break; case "gc": GC.Collect(); break; // typical commands case "join": irc.RfcJoin(e.Data.MessageArray[1]); break; case "part": irc.RfcPart(e.Data.MessageArray[1]); break; case "die": Exit(); break; } }
private void OnIrcPrivMsg(object sender, IrcEventArgs e) { for (int i = 0; i < e.Args[1].Length; i++) if (!ChraftConfig.AllowedChatChars.Contains(e.Args[1][i])) return; Server.Broadcast("§7[IRC] " + e.Prefix.Nickname + ":§f " + e.Args[1]); e.Handled = true; }
private void OnIrcWelcome(object sender, IrcEventArgs e) { Irc.Join(RunningConfiguration.Channel); }
// this method will get all IRC messages public static void OnRawMessage(object sender, IrcEventArgs e) { Console.WriteLine("Received: " + e.Data.RawMessage); }
// this method we will use to analyse queries (also known as private messages) public static void OnQueryMessage(object sender, IrcEventArgs e) { switch (e.Data.MessageArray[0]) { // debug stuff case "dump_channel": string requestedChannel = e.Data.MessageArray[1]; // getting the channel (via channel sync feature) Channel channel = Client.GetChannel(requestedChannel); // here we send messages Client.SendMessage(SendType.Message, e.Data.Nick, "<channel '" + requestedChannel + "'>"); Client.SendMessage(SendType.Message, e.Data.Nick, "Name: '" + channel.Name + "'"); Client.SendMessage(SendType.Message, e.Data.Nick, "Topic: '" + channel.Topic + "'"); Client.SendMessage(SendType.Message, e.Data.Nick, "Mode: '" + channel.Mode + "'"); Client.SendMessage(SendType.Message, e.Data.Nick, "Key: '" + channel.Key + "'"); Client.SendMessage(SendType.Message, e.Data.Nick, "UserLimit: '" + channel.UserLimit + "'"); // here we go through all users of the channel and show their // hashtable key and nickname string nicknameList = ""; nicknameList += "Users: "; foreach (DictionaryEntry de in channel.Users) { string key = (string)de.Key; var channeluser = (ChannelUser)de.Value; nicknameList += "("; if (channeluser.IsOp) { nicknameList += "@"; } if (channeluser.IsVoice) { nicknameList += "+"; } nicknameList += ")" + key + " => " + channeluser.Nick + ", "; } Client.SendMessage(SendType.Message, e.Data.Nick, nicknameList); Client.SendMessage(SendType.Message, e.Data.Nick, "</channel>"); break; case "gc": GC.Collect(); break; // typical commands case "join": Client.RfcJoin(e.Data.MessageArray[1]); break; case "part": Client.RfcPart(e.Data.MessageArray[1]); break; case "die": Exit(); break; case "server_properties": foreach (var property in Client.Properties) { Client.SendMessage(SendType.Message, e.Data.Nick, property.Key + " => " + property.Value); } break; } }
private void OnReceive(HostMask prefix, string command, string[] args) { _logger.Log(LogLevel.Debug, _plugin.Name, "OnReceive - {0}, {1}, {2}", prefix.Mask, command, args); if (Received != null) { IrcEventArgs e = new IrcEventArgs(prefix, command, args); Received.Invoke(this, e); if (e.Handled) return; } switch (command) { case "NICK": OnNick(prefix, args); break; case "PING": OnPing(args); break; case "001": OnWelcome(args); break; case "002": OnYourHost(args); break; case "003": OnCreated(args); break; case "004": OnMyInfo(args); break; } }