{"id":20735256,"url":"https://github.com/stwalkerster/ircbot-commandlib","last_synced_at":"2026-04-19T08:32:45.968Z","repository":{"id":140780608,"uuid":"372091940","full_name":"stwalkerster/ircbot-commandlib","owner":"stwalkerster","description":"C# IRC bot command parsing library","archived":false,"fork":false,"pushed_at":"2024-08-14T23:48:17.000Z","size":194,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-11T10:50:31.543Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stwalkerster.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-05-30T00:16:10.000Z","updated_at":"2024-08-14T23:48:27.000Z","dependencies_parsed_at":null,"dependency_job_id":"07bf0f5a-440a-4828-9365-b0e485cda8fc","html_url":"https://github.com/stwalkerster/ircbot-commandlib","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/stwalkerster/ircbot-commandlib","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stwalkerster%2Fircbot-commandlib","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stwalkerster%2Fircbot-commandlib/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stwalkerster%2Fircbot-commandlib/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stwalkerster%2Fircbot-commandlib/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stwalkerster","download_url":"https://codeload.github.com/stwalkerster/ircbot-commandlib/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stwalkerster%2Fircbot-commandlib/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32000275,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T20:23:30.271Z","status":"online","status_checked_at":"2026-04-19T02:00:07.110Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-17T05:36:54.687Z","updated_at":"2026-04-19T08:32:45.950Z","avatar_url":"https://github.com/stwalkerster.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"An IRC bot command-handling library.\n\n## Usage\nIn-depth knowledge of [Castle Windsor](https://github.com/castleproject/Windsor/blob/master/docs/README.md) is assumed here. It's also assumed you know how to use `Stwalkerster.IrcClient`.\n\nGrab yourself the following [NuGet](https://docs.microsoft.com/en-us/nuget/what-is-nuget) packages:\n```xml\n  \u003cpackage id=\"Castle.Core-log4net\" version=\"4.2.1\" targetFramework=\"net45\" /\u003e\n  \u003cpackage id=\"Castle.EventWiringFacility\" version=\"4.1.0\" targetFramework=\"net45\" /\u003e\n  \u003cpackage id=\"Castle.LoggingFacility\" version=\"4.1.0\" targetFramework=\"net45\" /\u003e\n  \u003cpackage id=\"Stwalkerster.IrcClient\" version=\"7.0.x-beta\" targetFramework=\"net45\" /\u003e\n  \u003cpackage id=\"Stwalkerster.Bot.CommandLib\" version=\"8.0.x-beta\" targetFramework=\"net45\" /\u003e\n\n  \u003c!-- these should be installed as dependencies of the above --\u003e\n  \u003cpackage id=\"Castle.Core\" version=\"4.2.1\" targetFramework=\"net45\" /\u003e\n  \u003cpackage id=\"Castle.Windsor\" version=\"4.1.0\" targetFramework=\"net45\" /\u003e\n  \u003cpackage id=\"log4net\" version=\"2.0.8\" targetFramework=\"net45\" /\u003e\n```\n\nI'll assume you're using a root namespace of `MyBot`.\n\nCreate yourself a basic [installer](https://github.com/castleproject/Windsor/blob/master/docs/installers.md) (this can be the same installer as the IRC client installer):\n```csharp\nnamespace MyBot.Startup\n{\n    public class Installer : IWindsorInstaller\n    {\n        public void Install(IWindsorContainer container, IConfigurationStore store)\n        {\n            container.AddFacility\u003cLoggingFacility\u003e(f =\u003e f.LogUsing\u003cLog4netFactory\u003e().WithConfig(\"log4net.xml\"));\n            container.AddFacility\u003cEventWiringFacility\u003e();\n            container.AddFacility\u003cStartableFacility\u003e(f =\u003e f.DeferredStart());\n            container.AddFacility\u003cTypedFactoryFacility\u003e();\n\n            container.Install(\n                new Stwalkerster.IrcClient.Startup.Installer()\n            );\n\n            container.Register(\n                Classes.FromThisAssembly().InNamespace(\"MyBot.Services\").WithServiceAllInterfaces(),\n                Classes.FromThisAssembly().InNamespace(\"MyBot.Commands\").LifestyleTransient(),\n                Component.For\u003cISupportHelper\u003e().ImplementedBy\u003cSupportHelper\u003e(),\n                Component.For\u003cIIrcConfiguration\u003e().Instance(new IrcConfiguration(/* ... */)),\n                Component.For\u003cIIrcClient\u003e().ImplementedBy\u003cIrcClient\u003e().Start()\n            );\n        }\n    }\n}\n```\n\nConfigure log4net.\n\nCreate your main class:\n```csharp\nnamespace MyBot.Services\n{\n    public class Program : IApplication\n    {\n        public static void Main()\n        {\n            var container = new WindsorContainer();\n            container.Install(FromAssembly.This());\n            var app = container.Resolve\u003cIApplication\u003e();\n        }\n\n        public Program(IIrcClient client)\n        {\n            client.JoinChannel(\"##stwalkerster-development\");\n        }\n        \n        public void Stop() {}\n        public void Run() {}\n    }\n}\n```\n\nImplement `IConfigurationProvider` and `IFlagService`:\n```csharp\nnamespace MyBot.Services\n{\n    public class ConfigProvider : IConfigurationProvider\n    {\n        public string CommandPrefix { get { return \"!\"; } }\n        public string DebugChannel { get { return \"##stwalkerster-development\"; } }\n    }\n\n    public class BasicFlagService : IFlagService\n    {\n        public bool UserHasFlag(IUser user, string flag) { return true; }\n        public IEnumerable\u003cstring\u003e GetFlagsForUser(IUser user) { return new[] {\"A\", \"D\", \"P\", \"O\", \"B\", \"C\"}; }\n    }\n}\n```\nThe string array is a list of flags for which the user should be reported as having access to - the implementation above is very basic, but should be extended into your own access control system.\n\nFinally, implement your commands in the `MyBot.Command` namespace, using `Stwalkerster.Bot.CommandLib.Commands.CommandUtilities.CommandBase` as a base class, and using the two attributes:\n```csharp\n    [CommandInvocation(\"whoami\")]\n    [CommandFlag(\"B\")]\n```\n\n`CommandInvocation` determines what you'll use to execute the command - in the above example, you'd run `!whoami`. `CommandFlag` determines what is passed to `IFlagService` for access control. This is a simple string, though there are some predefined single-letter flags in `Stwalkerster.Bot.CommandLib.Model.Flag`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstwalkerster%2Fircbot-commandlib","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstwalkerster%2Fircbot-commandlib","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstwalkerster%2Fircbot-commandlib/lists"}