public static void GenerateHelpText(Type staticCommandClass, out string html, out string plain) { string helptext = ""; foreach(MethodInfo method in staticCommandClass.GetMethods(BindingFlags.Static|BindingFlags.Public)){ BotCmd c = method.GetCustomAttribute<BotCmd> (); BotHelp h= method.GetCustomAttribute<BotHelp> (); if (c != null && h != null) { helptext += String.Format("<p><strong>{0}</strong> {1}</p>",c.CMD, h != null ? System.Web.HttpUtility.HtmlEncode(h.HelpText) : ""); } } plain = helptext.Replace("<strong>","").Replace("</strong>","").Replace("<p>","").Replace("</p>","\n"); html = helptext; }
public MatrixBot( string cmdprefix, string host, string user, string pass, string[] rooms, bool AutoAcceptInvite = false, StatusOptions statusOptions = null ) { prefix = cmdprefix; Client = new MatrixClient (host); Client.AddStateEventType ("uk.half-shot.status", typeof(HSStatusEvent)); this.AutoAcceptInvite = AutoAcceptInvite; Client.OnInvite += (roomid, joined) => { if (AutoAcceptInvite) { MatrixRoom room = Client.JoinRoom (roomid); if (room != null) { room.OnMessage += Room_OnMessage; } } }; Client.LoginWithPassword (user, pass); MatrixRoom[] existingRooms = Client.GetAllRooms (); foreach (string roomid in rooms) { MatrixRoom room = roomid.StartsWith ("#") ? Client.GetRoomByAlias (roomid) : Client.GetRoom (roomid); if (existingRooms.Contains (room)) { continue; } if (room == null) { room = Client.JoinRoom (roomid); if (room != null) { Console.WriteLine ("\tJoined " + roomid); } else { Console.WriteLine ("\tCouldn't find " + roomid); } } } existingRooms = Client.GetAllRooms (); foreach (MatrixRoom room in existingRooms) { room.OnMessage += Room_OnMessage; } //Find commands foreach (MethodInfo method in typeof(T).GetMethods(BindingFlags.Static|BindingFlags.Public)) { BotCmd cmd = method.GetCustomAttribute<BotCmd> (); if (cmd != null) { Cmds.Add (cmd, method); } if (method.GetCustomAttribute<BotFallback> () != null) { if (fallback != null) { Console.WriteLine ("WARN: You have more than one fallback command set, overwriting previous"); } fallback = method; } } if (statusOptions != null && statusOptions.StartAutomatically) { //Start Status Thread. statusOpts = statusOptions; StartStatusReporting(statusOptions.IntervalMinutes); } }