private void ChatroomPrivClasses(EventPacket eventPacket, PluginContext context) { string chatroom = eventPacket.ChatRoom; var room = context.ChatRooms[chatroom]; if (room == null) { context.Logger.ErrorFormat("Error: member add to a chatroom which doesn't exist."); return; } // iterate through each priv class string[] privClasses = eventPacket.Packet.body.TrimEnd('\n').Split('\n'); foreach (string privClass in privClasses) { // get priv class details string[] tokens = privClass.Split(':'); string privClassName = tokens[1]; int privClassLevel = Convert.ToInt32(tokens[0]); // add to room if (room.HasPrivClass(privClassName)) room.GetPrivClass(privClassName).Order = privClassLevel; else room.AddPrivClass(new PrivClass(privClassName, privClassLevel)); } }
private void CheckMessage(EventPacket packet, PluginContext context) { if (!enabled) return; bool isToBot = MessageHelper.IsMessageToUser(packet.Message, context.BotSettings.UserName, MsgUsernameParse.Strict); // if it's not to us or the message is from us, then don't do anything if (!isToBot || packet.From.Equals(context.BotSettings.UserName, StringComparison.OrdinalIgnoreCase)) return; string message = packet.Message.Replace(context.BotSettings.UserName + ":", string.Empty); var session = GetSession(packet.From); try { string response = session.Think(message); context.ThisRoom.Respond(response); } catch (Exception ex) { // log error and try to restart the conversation context.Console.WriteLine("Error getting AI response. See bot log for details.", Core.Framework.Shell.Style.Error); context.Logger.ErrorFormat(ex, "Error getting AI response. See bot log for details."); context.ThisRoom.Respond("Sorry, I missed that. Could you say that again?"); } }
private void Help(CommandPacket packet, PluginContext context) { if (string.IsNullOrWhiteSpace(packet.Message)) { context.ThisRoom.Respond("You must provide a command to get help information for."); return; } string command = ToLower(packet.Message); var commandData = context.Plugins.GetCommandHandler(command); if (commandData == null) { context.ThisRoom.Respond("The command '{0}' does not exist.", command); return; } var help = commandData.Help; if (string.IsNullOrWhiteSpace(help.Usage)) { context.ThisRoom.Respond("Help is not available for this command."); return; } StringBuilder output = new StringBuilder(string.Format("<sub>:pointr: <b>Command Name:</b> {0}<br>", command)); output.AppendFormat(":pointr: <b>Usage:</b> {0}<br>", help.Usage); if (!string.IsNullOrWhiteSpace(help.Description)) output.AppendFormat(":pointr: <b>Description:</b> {0}", help.Description); context.ThisRoom.Say(output.ToString()); }
private void ChatroomPrivChange(EventPacket eventPacket, PluginContext context) { string chatroom = eventPacket.ChatRoom; var room = context.ChatRooms[chatroom]; if (room == null) { context.Logger.ErrorFormat("Error: priv change for a chatroom which doesn't exist."); return; } // get info from packet Packet subPacket = eventPacket.Packet.GetSubPacket(); string username = subPacket.param; string privClass = subPacket.args["pc"]; string by = subPacket.args["by"]; // update priv class if user is signed on Member member = room.GetMember(username); if (member != null) { member.PrivClass = privClass; } context.Console.WriteLine(string.Format("** {0} has been made a member of {1} by {2} *", username, privClass, by), Style.Warning); room.Logger.Log(eventPacket.Packet); }
private void AdminMove(EventPacket eventPacket, PluginContext context) { string chatroom = eventPacket.ChatRoom; var room = context.ChatRooms[chatroom]; if (room == null) { context.Logger.ErrorFormat("Error: priv move for a chatroom which doesn't exist."); return; } Packet subPacket = eventPacket.Packet.GetSubPacket(); string privClass = subPacket.args["prev"]; string newPrivClass = subPacket.args["name"]; string by = subPacket.args["by"]; // get all users who have this priv class List<Member> members = (from m in room.Members where m.PrivClass == privClass select m).ToList(); // update their priv class to the new one foreach (Member m in members) m.PrivClass = newPrivClass; context.Console.WriteLine(string.Format("{0} users moved from privclass '{1}' to '{2}' by {3}.", members.Count, privClass, newPrivClass, by)); room.Logger.Log(eventPacket.Packet); }
private void Sudo(CommandPacket packet, PluginContext context) { Action showHelp = () => context.ThisRoom.Respond("Usage: sudo [user] [command...]"); string[] args = MessageHelper.MessageToArgs(packet.Message); if (args.Length < 2) { showHelp(); return; } string userName = args[0]; string command = args[1]; if (!context.Authorizer.DoesUserExist(userName)) { context.ThisRoom.Respond("You must provide a user to impersonate."); return; } else if (string.IsNullOrEmpty(command)) { context.ThisRoom.Respond("You must provide a command to execute."); return; } // modify the packet packet.OverrideFrom(userName); packet.OverrideCommand(command); packet.OverrideMessage(packet.Message.Right(userName.Length).Trim()); // invoke the command handler System.ValidateAndInvokeCommand(packet, context); }
/// <summary> /// Sets a user's status as away. /// </summary> /// <param name="user">The user.</param> /// <param name="message">The message.</param> /// <param name="context">The context.</param> private void SetAway(string user, string message, PluginContext context) { aways[user.ToLower().Trim()] = message; if (awayList.IndexOf(user.ToLower().Trim()) < 0) awayList.Add(user.ToLower().Trim()); context.ThisRoom.Say("{0} is now away{1}", user, message != "" ? ": " + message : ""); }
private void AICommand(CommandPacket packet, PluginContext context) { if (string.IsNullOrEmpty(packet.Message)) { context.ThisRoom.Respond("Usage: ai [on|off|status]"); return; } string cmd = packet.Message.ToLower().Trim(); switch (cmd) { case "on": case "off": enabled = cmd == "on" ? true : false; context.ThisRoom.Say("** AI respond set to '{0}' by {1} *", cmd, packet.From); if (enabled) sessionTimer.Start(); else sessionTimer.Stop(); break; case "status": string status = enabled ? "on" : "off"; context.ThisRoom.Say("** AI respond set to '{0}' *", status); break; } }
private void Part(EventPacket eventPacket, PluginContext context) { var packet = eventPacket.Packet; string chatroom = eventPacket.ChatRoom; if (packet.args["e"] == "not joined" || packet.args["e"] == "bad namespace") return; // bail here because we wouldn't have this chatroom registered in these cases // get part reason string reason = string.Empty; if (packet.args.ContainsKey("r")) reason = packet.args["r"]; reason = string.IsNullOrEmpty(reason) ? reason : " Reason: " + reason; // tell the bot to leave the chatroom context.ChatRooms[chatroom].Logger.Log(packet); context.ChatRooms.Remove(chatroom); context.Console.WriteLine(string.Format("** Bot has left the chatroom {0}.{1}", chatroom, reason), Style.Out); // if it's an autojoin channel, try to sign back in if (context.BotSettings.AutoJoins.Contains(chatroom.Trim('#'))) { context.Client.Join(chatroom); context.Console.WriteLine("*** Bot rejoined " + chatroom + " *", Style.Out); } else if (context.ChatRooms.Count == 0) { context.Console.WriteLine("No longer joined to any rooms! Exiting...", Style.Warning); context.Listener.Stop(); } }
private void Kicked(EventPacket eventPacket, PluginContext context) { string chatroom = eventPacket.ChatRoom; var room = context.ChatRooms[chatroom]; var packet = eventPacket.Packet; if (room == null) { context.Logger.ErrorFormat("Error: kick event for a chatroom which doesn't exist."); return; } // log kick string reason = string.IsNullOrEmpty(packet.body) ? string.Empty : " Reason: " + packet.body; string message = string.Format("Bot was kicked from {0}.{1}", chatroom, reason); room.Logger.Log(packet); context.Console.WriteLine(message, Style.Warning); // remove chatroom context.ChatRooms.Remove(chatroom); // if it's an autojoin channel, try to sign back in if (context.BotSettings.AutoJoins.Contains(chatroom.Trim('#'))) { context.Client.Join(chatroom); context.Console.WriteLine("Bot rejoined " + chatroom); } }
private void Join(EventPacket eventPacket, PluginContext context) { var packet = eventPacket.Packet; string chatroom = eventPacket.ChatRoom; if (packet.args["e"] != "ok") { context.ChatRooms.Remove(chatroom); context.Console.WriteLine(string.Format("Unable to join chatroom {0}. Reason: {1}", chatroom, packet.args["e"]), Style.Warning); if (context.ChatRooms.Count == 0) { context.Console.WriteLine("No longer joined to any rooms! Exiting...", Style.Warning); context.Listener.Stop(); return; } else { return; } } context.Console.WriteLine(string.Format("*** Bot has joined {0} *", chatroom), Style.Out); if (!context.ChatRooms.HasChatRoom(chatroom)) context.ChatRooms.Add(chatroom); }
private void Command(CommandPacket packet, PluginContext context) { var sender = context.ChatRooms[packet.ChatRoom].GetMember(packet.From); var commands = context.Authorizer.AllCommands.Where(c => c.Value.Order <= sender.Role.Order).OrderBy(c => c.Key); if (commands.Count() > 0) { var commandsOutput = new StringBuilder(string.Format("<abbr title='{0}'> </abbr><b>Bot Commands:</b><br><sub>", packet.From)); foreach (var command in commands) { var commandData = context.Plugins.GetCommandHandler(command.Key); // command data may be null if we have a command with a setting // but that command isn't loaded. we'll keep the setting around in case // it's loaded again and just skip it here if (commandData == null) continue; string commandName = command.Key, roleName = command.Value.Name; commandsOutput.AppendFormat("[{0}", commandData.Target.Enabled ? string.Empty : ":bulletred:"); commandsOutput.AppendFormat("<b>{0}</b> - {1}] ", commandName, roleName); } commandsOutput.Append("<br>:bulletblue: Disabled commands are displayed with a :bulletred:"); context.ThisRoom.Say(commandsOutput.ToString()); } else { context.ThisRoom.Respond("Sorry there are not any commands that you have access to."); } }
private void AdminRename(EventPacket eventPacket, PluginContext context) { string chatroom = eventPacket.ChatRoom; var room = context.ChatRooms[chatroom]; if (room == null) { context.Logger.ErrorFormat("Error: priv rename for a chatroom which doesn't exist."); return; } Packet subPacket = eventPacket.Packet.GetSubPacket(); string privClass = subPacket.args["prev"]; string newPrivClass = subPacket.args["name"]; string by = subPacket.args["by"]; if (room.HasPrivClass(privClass)) { int privClassLevel = room.GetPrivClass(privClass).Order; // remove the old and add the new room.RemovePrivClass(privClass); room.AddPrivClass(new PrivClass(newPrivClass, privClassLevel)); // update users who have this priv class List<Member> members = (from m in room.Members where m.PrivClass == privClass select m).ToList(); // update their priv class to the new one foreach (Member m in members) m.PrivClass = newPrivClass; context.Console.WriteLine(string.Format("The privclass '{0}' was renamed to '{!}' by {2}.", privClass, newPrivClass, by)); room.Logger.Log(eventPacket.Packet); } }
private void Plugins(CommandPacket packet, PluginContext context) { string cmd = packet.Message.Trim().ToLower(); switch (cmd) { case "": case "list": var listOutput = new StringBuilder("<b>All loaded plugins:</b><br><sub>"); foreach (var plugin in context.Plugins.GetPlugins()) { string name = plugin.MetaData.Name; string shortcut = plugin.MetaData.ShortCutName; string pluginName = name == shortcut ? name : name + " (" + shortcut + ")"; listOutput.AppendFormat(plugin.Enabled ? "[{0}] " : "<b>[{0}]</b> ", pluginName); } listOutput.Append("<br>:bulletblue: Plugins that are deactivated are in bold."); context.ThisRoom.Say(listOutput.ToString()); break; case "reload": context.Plugins.Load(); context.ThisRoom.Say("** all plugins reloaded *"); break; default: context.ThisRoom.Respond("Usage: plugins [list|reload]"); break; } }
private void Command(CommandPacket packet, PluginContext context) { string motion = rockPaperScissors[randomizer.Next(3)]; string say = string.Empty; switch (packet.Message.ToLower()) { case "rock": if (motion == "rock") say = "Rock ties rock."; if (motion == "paper") say = "Paper covers rock. You lose."; if (motion == "scissors") say = "Rock smashes scissors. You win."; break; case "paper": if (motion == "rock") say = "Paper covers rock. You win."; if (motion == "paper") say = "Paper ties paper."; if (motion == "scissors") say = "Scissors cut paper. You lose."; break; case "scissors": if (motion == "rock") say = "Rock smashes scissors. You lose."; if (motion == "paper") say = "Scissors cut paper. You win."; if (motion == "scissors") say = "Scissors tie scissors."; break; default: context.ThisRoom.Respond("Usage: shoot [rock | paper | scissors]"); return; } context.ThisRoom.Respond(say); }
private void AdminRemove(EventPacket eventPacket, PluginContext context) { string chatroom = eventPacket.ChatRoom; var room = context.ChatRooms[chatroom]; if (room == null) { context.Logger.ErrorFormat("Error: priv remove for a chatroom which doesn't exist."); return; } Packet subPacket = eventPacket.Packet.GetSubPacket(); string by = subPacket.args["by"]; string privClass = subPacket.args["name"]; room.RemovePrivClass(privClass); // get all users who have this priv class List<Member> members = (from m in room.Members where m.PrivClass == privClass select m).ToList(); // update their priv class foreach (Member m in members) m.PrivClass = string.Empty; context.Console.WriteLine(string.Format("The privclass '{0}' was removed by {1}.", privClass, by)); room.Logger.Log(eventPacket.Packet); }
private void Part(EventPacket packet, PluginContext context) { if (!context.ChatRooms.HasChatRoom(packet.ChatRoom)) return; // we don't have a reference for some wierd reason var chatroom = context.ChatRooms[packet.ChatRoom]; MainWindowInvoke(window => window.PartChatroom(chatroom)); }
private void Ignore(CommandPacket packet, PluginContext context) { var args = MessageHelper.MessageToArgs(packet.Message).Iterator(); string cmd = args.Next(ToLower), userName = args.Next(ToLower); if (args.Length == 0) cmd = "list"; switch (cmd) { case "list": if (context.BotSettings.IgnoredUsers.Count == 0) { context.ThisRoom.Respond("The ignored user list is empty."); return; } else { StringBuilder output = new StringBuilder("<b>Ignored Users</b>:<br /><sub>"); foreach (string u in context.BotSettings.IgnoredUsers) output.AppendFormat("[{0}] ", u); context.ThisRoom.Say(output.ToString()); } break; case "add": if (string.IsNullOrEmpty(userName)) { context.ThisRoom.Respond("Please provide a username to add."); return; } if (context.BotSettings.IgnoredUsers.Contains(userName)) { context.ThisRoom.Respond("This username is already in the ignored list."); return; } context.BotSettings.IgnoredUsers.Add(userName); context.BotSettings.Save(); context.ThisRoom.Respond("** The username '{0}' has been added to the ignore list *", userName); break; case "remove": case "delete": case "del": if (string.IsNullOrEmpty(userName)) { context.ThisRoom.Respond("Please provide a username to remove."); return; } if (!context.BotSettings.IgnoredUsers.Contains(userName)) { context.ThisRoom.Respond("This username is not in the ignored list."); return; } context.BotSettings.IgnoredUsers.Remove(userName); context.BotSettings.Save(); context.ThisRoom.Respond("** The username '{0}' has been removed from the ignore list *", userName); break; } }
private void CheckMessage(EventPacket packet, PluginContext context) { // make sure the message is to us but not from us - if so flash the window if (MessageHelper.IsMessageToUser(packet.Message, context.BotSettings.UserName, MsgUsernameParse.Lazy) && packet.From.ToLower() != context.BotSettings.UserName.ToLower() && packet.ChatRoom.ToLower().Trim('#') != "datashare") { FlashConsoleWindow(Process.GetCurrentProcess().MainWindowHandle); } }
private void RussianRouletteCommand(CommandPacket packet, PluginContext context) { int spin = randomizer.Next(1, 6); int bullet = randomizer.Next(1, 6); context.ThisRoom.Respond("You place a bullet in the :gun: and spin it around. Then you put it to your head, and pull..."); if (spin == bullet) context.ThisRoom.Respond("BLAM! You lose."); else context.ThisRoom.Respond(":phew: You're alright."); }
private void AutoJoin(CommandPacket packet, PluginContext context) { Action showHelp = () => context.ThisRoom.Respond("Usage: autojoin [add|del|list] [room]"); var args = MessageHelper.MessageToArgs(packet.Message); if (args.Length != 2) { showHelp(); return; } string cmd = args[0].ToLower().Trim(), room = args[1].ToLower().Trim().Trim('#'); switch (cmd) { case "add": if (context.BotSettings.AutoJoins.Contains(room)) { context.ThisRoom.Respond("{0} is already on the autojoin list.", room); } else { context.BotSettings.AutoJoins.Add(room); context.ThisRoom.Respond("Added {0} to the autojoin list.", room); } break; case "remove": case "del": case "delete": if (!context.BotSettings.AutoJoins.Contains(room)) { context.ThisRoom.Respond("{0} is not on the autojoin list.", room); } else { context.BotSettings.AutoJoins.Remove(room); context.ThisRoom.Respond("Deleted {0} from the autojoin list.", room); } break; case "list": var listOutput = new StringBuilder(string.Format("<abbr title='{0}'> </abbr><b>Autojoin List:</b><br>", packet.From)); foreach (string s in context.BotSettings.AutoJoins) listOutput.Append("-> ").Append(s).Append("<br>"); context.ThisRoom.Say(listOutput.ToString()); break; case "auto": break; default: showHelp(); break; } }
private void AutoJoinDatashare(EventPacket packet, PluginContext context) { var p = packet.Packet; if (p.args.ContainsKey("e") && p.args["e"] == "ok") { // we've successfully logged in, register all BDS handlers bdsHandlers.Add("BOTCHECK", BdsBotcheck); bdsHandlers.Add("BOTDEF", BdsBotdef); // join the room context.Client.Join(DatashareNS); } }
private void AwayCommand(CommandPacket packet, PluginContext context) { var message = packet.Message; if (message.ToLower().Trim() == "back") { BackCommand(packet, context); return; } else { SetAway(packet.From, message, context); } }
private void CTrig(CommandPacket packet, PluginContext context) { string newTrigger = packet.Message; if (string.IsNullOrWhiteSpace(newTrigger)) { context.ThisRoom.Respond("Usage: ctrig [trigger]"); return; } context.BotSettings.Trigger = newTrigger; context.BotSettings.Save(); context.ThisRoom.Say("** bot trigger changed to {0} by {1} *", newTrigger, packet.From); }
private void EightBall(CommandPacket packet, PluginContext context) { string question = packet.Message; if (string.IsNullOrWhiteSpace(question)) { context.ThisRoom.Respond("Please ask a question!"); } else { string answer = messages[random.Next(0, messages.Length)]; context.ThisRoom.Say("The 8ball says <abbr title='{0}'> </abbr>: <b>{1}</b>", packet.From, answer); } }
private void Action(EventPacket eventPacket, PluginContext context) { var room = context.ChatRooms[eventPacket.ChatRoom]; if (room != null && room.Logger.Enabled) { var subPacket = eventPacket.Packet.GetSubPacket(); context.Console.WriteLine(string.Format("[{0}] * {1} {2}", eventPacket.ChatRoom, subPacket.args["from"], subPacket.body)); room.Logger.Log(eventPacket.Packet); } }
private void ChatroomMemberList(EventPacket eventPacket, PluginContext context) { string chatroom = eventPacket.ChatRoom; var room = context.ChatRooms[chatroom]; if (room == null) { context.Logger.ErrorFormat("Error: member list for a chatroom which doesn't exist."); return; } // iterate through each user string[] subPackets = eventPacket.Packet.body.Split(new string[] { "\n\n" }, StringSplitOptions.None); foreach (string subPacket in subPackets) { if (subPacket == "") continue; // get subpacket Packet p = new Packet(subPacket); Member member = room.GetMember(p.param); if (member == null) { // get the bot user if they exist var user = context.Authorizer.GetUser(p.param); room.AddMember(new Member { UserName = p.param, RealName = p.args.ContainsKey("realname") ? p.args["realname"] : string.Empty, Description = p.args.ContainsKey("typename") ? p.args["typename"] : string.Empty, PrivClass = p.args.ContainsKey("pc") ? p.args["pc"] : string.Empty, //ServerPrivClass = p.args["gpc"], Symbol = p.args.ContainsKey("symbol") ? p.args["symbol"] : string.Empty, Role = user == null ? context.Authorizer.DefaultRole : user.Role }); } else { member.UserName = p.param; member.RealName = p.args.ContainsKey("realname") ? p.args["realname"] : string.Empty; member.Description = p.args.ContainsKey("typename") ? p.args["typename"] : string.Empty; member.PrivClass = p.args.ContainsKey("pc") ? p.args["pc"] : string.Empty; //user.ServerPrivClass = p.args["gpc"]; member.Symbol = p.args.ContainsKey("symbol") ? p.args["symbol"] : string.Empty; member.Count++; } } }
private void Join(CommandPacket packet, PluginContext context) { string rooms = packet.Message.Trim().ToLower(); if (string.IsNullOrWhiteSpace(rooms)) { context.ThisRoom.Respond("You must specify a room to join."); return; } foreach (string r in rooms.Split(' ')) { context.Client.Join(r); context.ThisRoom.Say("** joined the chatroom #{0} *", r); } }
private void DefineCommand(CommandPacket packet, PluginContext context) { string word = packet.Message; if (string.IsNullOrEmpty(word)) { context.ThisRoom.Respond("Usage: define [word]"); return; } string definition = GetDefinition(word); if (string.IsNullOrEmpty(definition)) context.ThisRoom.Respond("<b>No definition was found for <u>{0}</u>.</b>", word); else context.ThisRoom.Say("<b><u>" + word + "</u></b>:<br /><sub>" + ParseDefinition(definition) + "</sub>"); }
private void ChatroomJoin(EventPacket eventPacket, PluginContext context) { var packet = eventPacket.Packet; string chatroom = eventPacket.ChatRoom; var room = context.ChatRooms.Get(chatroom); if (room == null) { context.Logger.ErrorFormat("Error: user add for chatroom '{0}' which doesn't exist.", chatroom); return; } Packet subPacket = packet.GetSubPacket(); string username = subPacket.param; // user may exist already (bot and user can sign on at same time) var member = room.GetMember(username); if (member == null) { // get user details from arg list from the packet Packet.Args a = Packet.Args.getArgsNData(subPacket.body); // get the bot user if they exist var user = context.Authorizer.GetUser(username); // create new user Member m = new Member { UserName = username, PrivClass = a.args["pc"], Symbol = a.args["symbol"], RealName = a.args["realname"], Description = a.args["typename"], ServerPrivClass = a.args["gpc"], Role = user == null ? context.Authorizer.DefaultRole : user.Role }; room.AddMember(m); } else { member.Count++; } if (room.Logger.Enabled) { context.Console.WriteLine(string.Format("[{0}] {1} joined.", chatroom, username)); room.Logger.Log(eventPacket.Packet); } }