void SeenUser(string name, string ip, bool save = true) { if (ip.Contains('@')) { ip = ip.Substring(ip.IndexOf('@') + 1); } if (IPHistory == null) { if (File.Exists("data/iphistory.yml")) { IPHistory = new YAMLConfiguration(File.ReadAllText("data/iphistory.yml")); } else { IPHistory = new YAMLConfiguration(""); } } List <string> paths = new List <string>(); string basepath = getippath(ip); paths.Add(basepath); string[] split = basepath.Split('.'); for (int i = 0; i < split.Length; i++) { StringBuilder sb = new StringBuilder(); for (int x = 0; x < split.Length; x++) { if (x == i) { sb.Append("____STAR____"); } else { sb.Append(split[x]); } if (x + 1 < split.Length) { sb.Append('.'); } } paths.Add(sb.ToString()); } foreach (string pathy in paths) { List <object> original = IPHistory.ReadList(pathy); if (original == null) { original = new List <object>(); } if (!original.Contains(name.ToLower())) { original.Add(name.ToLower()); IPHistory.Set(pathy, original); if (save) { saveSeenList(); } } } }
public void dScriptCheckScript(List<String> warnings, string scriptname, YAMLConfiguration script) { string script_type = script.ReadString("type", null); if (string.IsNullOrEmpty(script_type)) { Warn(warnings, WarnType.ERROR, "Missing script type for script '" + scriptname + "'! Ignoring contents."); return; } switch (script_type) { case "interact": if (!script.HasKey(null, "steps")) { Warn(warnings, WarnType.ERROR, "Missing STEPS key for script '" + scriptname + "'!"); } break; case "yaml data": // Note: Nothing required here break; case "entity": { if (!script.HasKey(null, "entity_type")) { Warn(warnings, WarnType.MINOR, "Missing ENTITY_TYPE key for script '" + scriptname + "'!"); } List<string> keys = script.GetKeys(null); foreach (string key in keys) { if (key != "entity_type" && key != "type") { bool exists = false; for (int i = 0; i < AllMeta.Mechanisms.Count; i++) { if (AllMeta.Mechanisms[i].Objectd.ToLower() == "dentity" && AllMeta.Mechanisms[i].Name.ToLower() == key) { exists = true; break; } } if (!exists) { Warn(warnings, WarnType.WARNING, "Unrecognized entity mechanism '" + key + "' for " + scriptname); } } } } break; case "custom": // Note: Nothing required here // TODO: tags: and requirements: script checks break; case "assignment": if (!script.HasKey(null, "interact scripts")) { Warn(warnings, WarnType.MINOR, "Missing INTERACT SCRIPTS key for script '" + scriptname + "'!"); } if (!script.HasKey(null, "actions")) { Warn(warnings, WarnType.MINOR, "Missing ACTIONS key for script '" + scriptname + "'!"); } // TODO: all actions, validate break; case "task": { if (!script.HasKey(null, "script")) { Warn(warnings, WarnType.ERROR, "Missing SCRIPT key for script '" + scriptname + "'!"); } List<string> keys = script.GetKeys(null); for (int i = 0; i < keys.Count; i++) { if (script.IsList(keys[i])) { List<object> scriptData = script.ReadList(keys[i]); ReadScriptData(warnings, scriptData, scriptname + "." + keys[i], ""); } } } break; case "procedure": { if (!script.HasKey(null, "script")) { Warn(warnings, WarnType.ERROR, "Missing SCRIPT key for script '" + scriptname + "'!"); } List<string> keys = script.GetKeys(null); for (int i = 0; i < keys.Count; i++) { if (script.IsList(keys[i])) { List<object> scriptData = script.ReadList(keys[i]); ReadScriptData(warnings, scriptData, scriptname + "." + keys[i], ""); } } } break; case "world": { if (!script.HasKey(null, "events")) { Warn(warnings, WarnType.ERROR, "Missing EVENTS key for script '" + scriptname + "'!"); } List<string> keys = script.GetKeys(null); for (int i = 0; i < keys.Count; i++) { if (script.IsList(keys[i])) { List<object> scriptData = script.ReadList(keys[i]); ReadScriptData(warnings, scriptData, scriptname + "." + keys[i], ""); } } keys = script.GetKeys("events"); for (int i = 0; i < keys.Count; i++) { if (script.IsList("events." + keys[i])) { ValidateEvent(warnings, keys[i], scriptname + ".events"); List<object> scriptData = script.ReadList("events." + keys[i]); ReadScriptData(warnings, scriptData, scriptname + ".events." + keys[i], ""); } else { Warn(warnings, WarnType.ERROR, "Invalid EVENTS sub-key '" + keys[i] + "' for " + scriptname); } } } break; case "book": // TODO: Book required keys break; case "command": { if (!script.HasKey(null, "script")) { Warn(warnings, WarnType.ERROR, "Missing SCRIPT key for script '" + scriptname + "'!"); } // TODO: Command required keys List<string> keys = script.GetKeys(null); for (int i = 0; i < keys.Count; i++) { if (keys[i].ToLower() != "aliases" && script.IsList(keys[i])) { List<object> scriptData = script.ReadList(keys[i]); ReadScriptData(warnings, scriptData, scriptname + "." + keys[i], ""); } } } break; case "format": if (!script.HasKey(null, "format")) { Warn(warnings, WarnType.ERROR, "Missing FORMAT key for script '" + scriptname + "'!"); } // TODO: Validate format line break; case "inventory": // TODO: Inventory required keys break; case "item": if (!script.HasKey(null, "material")) { Warn(warnings, WarnType.ERROR, "Missing MATERIAL key for script '" + scriptname + "'!"); } // TODO: Validate inputs break; case "map": // TODO: Map required keys break; case "version": // TODO: Version required keys break; default: Warn(warnings, WarnType.ERROR, "Unknown script type '" + script_type + "' for script '" + scriptname + "'!"); break; } }
public void dScriptCheckScript(List <String> warnings, string scriptname, YAMLConfiguration script) { string script_type = script.ReadString("type", null); if (string.IsNullOrEmpty(script_type)) { Warn(warnings, WarnType.ERROR, "Missing script type for script '" + scriptname + "'! Ignoring contents."); return; } switch (script_type) { case "interact": if (!script.HasKey(null, "steps")) { Warn(warnings, WarnType.ERROR, "Missing STEPS key for script '" + scriptname + "'!"); } break; case "yaml data": // Note: Nothing required here break; case "entity": { if (!script.HasKey(null, "entity_type")) { Warn(warnings, WarnType.MINOR, "Missing ENTITY_TYPE key for script '" + scriptname + "'!"); } List <string> keys = script.GetKeys(null); foreach (string key in keys) { if (key != "entity_type" && key != "type") { bool exists = false; for (int i = 0; i < AllMeta.Mechanisms.Count; i++) { if (AllMeta.Mechanisms[i].Objectd.ToLower() == "dentity" && AllMeta.Mechanisms[i].Name.ToLower() == key) { exists = true; break; } } if (!exists) { Warn(warnings, WarnType.WARNING, "Unrecognized entity mechanism '" + key + "' for " + scriptname); } } } } break; case "custom": // Note: Nothing required here // TODO: tags: and requirements: script checks break; case "assignment": if (!script.HasKey(null, "interact scripts")) { Warn(warnings, WarnType.MINOR, "Missing INTERACT SCRIPTS key for script '" + scriptname + "'!"); } if (!script.HasKey(null, "actions")) { Warn(warnings, WarnType.MINOR, "Missing ACTIONS key for script '" + scriptname + "'!"); } // TODO: all actions, validate break; case "task": { if (!script.HasKey(null, "script")) { Warn(warnings, WarnType.ERROR, "Missing SCRIPT key for script '" + scriptname + "'!"); } List <string> keys = script.GetKeys(null); for (int i = 0; i < keys.Count; i++) { if (script.IsList(keys[i])) { List <object> scriptData = script.ReadList(keys[i]); ReadScriptData(warnings, scriptData, scriptname + "." + keys[i], ""); } } } break; case "procedure": { if (!script.HasKey(null, "script")) { Warn(warnings, WarnType.ERROR, "Missing SCRIPT key for script '" + scriptname + "'!"); } List <string> keys = script.GetKeys(null); for (int i = 0; i < keys.Count; i++) { if (script.IsList(keys[i])) { List <object> scriptData = script.ReadList(keys[i]); ReadScriptData(warnings, scriptData, scriptname + "." + keys[i], ""); } } } break; case "world": { if (!script.HasKey(null, "events")) { Warn(warnings, WarnType.ERROR, "Missing EVENTS key for script '" + scriptname + "'!"); } List <string> keys = script.GetKeys(null); for (int i = 0; i < keys.Count; i++) { if (script.IsList(keys[i])) { List <object> scriptData = script.ReadList(keys[i]); ReadScriptData(warnings, scriptData, scriptname + "." + keys[i], ""); } } keys = script.GetKeys("events"); for (int i = 0; i < keys.Count; i++) { if (script.IsList("events." + keys[i])) { ValidateEvent(warnings, keys[i], scriptname + ".events"); List <object> scriptData = script.ReadList("events." + keys[i]); ReadScriptData(warnings, scriptData, scriptname + ".events." + keys[i], ""); } else { Warn(warnings, WarnType.ERROR, "Invalid EVENTS sub-key '" + keys[i] + "' for " + scriptname); } } } break; case "book": // TODO: Book required keys break; case "command": { if (!script.HasKey(null, "script")) { Warn(warnings, WarnType.ERROR, "Missing SCRIPT key for script '" + scriptname + "'!"); } // TODO: Command required keys List <string> keys = script.GetKeys(null); for (int i = 0; i < keys.Count; i++) { if (keys[i].ToLower() != "aliases" && script.IsList(keys[i])) { List <object> scriptData = script.ReadList(keys[i]); ReadScriptData(warnings, scriptData, scriptname + "." + keys[i], ""); } } } break; case "format": if (!script.HasKey(null, "format")) { Warn(warnings, WarnType.ERROR, "Missing FORMAT key for script '" + scriptname + "'!"); } // TODO: Validate format line break; case "inventory": // TODO: Inventory required keys break; case "item": if (!script.HasKey(null, "material")) { Warn(warnings, WarnType.ERROR, "Missing MATERIAL key for script '" + scriptname + "'!"); } // TODO: Validate inputs break; case "map": // TODO: Map required keys break; case "version": // TODO: Version required keys break; default: Warn(warnings, WarnType.ERROR, "Unknown script type '" + script_type + "' for script '" + scriptname + "'!"); break; } }