Created
April 28, 2016 04:45
-
-
Save justinkinney/3f29ac4f148fb1e0bd24ec06ddb71379 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
bash-4.3$ grep sasl mix.exs -A5 -B5 | |
"coveralls.post": :test] | |
] | |
end | |
def application do | |
[applications: [:sasl, | |
:logger, | |
:probe, | |
:logger_file_backend, | |
:ibrowse, | |
:httpotion, | |
bash-4.3$ scripts/docker-start | |
+ set -eo pipefail | |
+ export ALLOW_WARNINGS=true | |
+ ALLOW_WARNINGS=true | |
++ dirname scripts/docker-start | |
+ export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:scripts | |
+ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:scripts | |
+ echo 'Waiting for Postgres to become available...' | |
Waiting for Postgres to become available... | |
...elided... | |
+ echo 'Apply database migrations...' | |
Apply database migrations... | |
+ mix ecto.migrate --no-compile --no-deps-check | |
04:43:56.718 [info] Already up | |
+ echo 'Launching Cog server...' | |
Launching Cog server... | |
+ elixir --no-halt --name cog@127.0.0.1 -S mix phoenix.server --no-compile --no-deps-check | |
2016-04-28T04:43:58.0958 (Probe:11) [info] Starting Probe | |
2016-04-28T04:43:58.0962 (Probe.Configuration:38) [info] Writing audit logs to the `/home/operable/cog/data/audit_logs` directory | |
2016-04-28T04:43:58.0963 (Probe.JSONLogHandler:24) [info] Attempting to open JSON-formatted event log file `/home/operable/cog/data/audit_logs/events.log` | |
2016-04-28T04:43:58.0964 (Probe.JSONLogHandler:27) [info] Logging JSON-formatted event stream to `/home/operable/cog/data/audit_logs/events.log` | |
2016-04-28T04:43:59.0107 (Porcelain.Init:30) [info] [Porcelain]: goon executable not found | |
2016-04-28T04:43:59.0107 (Porcelain.Init:31) [info] [Porcelain]: falling back to the basic driver. | |
2016-04-28T04:43:59.0107 (Porcelain.Init:32) [info] [Porcelain]: (set `config :porcelain, driver: Porcelain.Driver.Basic` or `config :porcelain, goon_warn_if_missing: false` to disable this warning) | |
2016-04-28T04:43:59.0113 (Cog:113) [info] Using Cog.Adapters.Slack chat adapter | |
2016-04-28T04:43:59.0136 (Cog.BusDriver:62) [info] Message bus configured for plain TCP | |
2016-04-28T04:43:59.0148 () [info] Starting emqttd on node 'cog@127.0.0.1' | |
2016-04-28T04:44:01.0200 () [info] Started 'emqttd ctl' | |
2016-04-28T04:44:01.0201 () [info] Started 'emqttd trace' | |
2016-04-28T04:44:01.0201 () [info] Started 'emqttd pubsub' | |
2016-04-28T04:44:01.0207 () [info] Started 'emqttd stats' | |
2016-04-28T04:44:01.0214 () [info] Started 'emqttd metrics' | |
2016-04-28T04:44:01.0215 () [info] Started 'emqttd retained' | |
2016-04-28T04:44:01.0215 () [info] Started 'emqttd pooler' | |
2016-04-28T04:44:01.0215 () [info] Started 'emqttd client manager' | |
2016-04-28T04:44:01.0215 () [info] Started 'emqttd session manager' | |
2016-04-28T04:44:01.0216 () [info] Started 'emqttd session supervisor' | |
2016-04-28T04:44:01.0217 () [info] Started 'emqttd broker' | |
2016-04-28T04:44:01.0217 () [info] Started 'emqttd alarm' | |
2016-04-28T04:44:01.0217 () [info] Started 'emqttd mod supervisor' | |
2016-04-28T04:44:01.0217 () [info] Started 'emqttd bridge supervisor' | |
2016-04-28T04:44:01.0217 () [info] Started 'emqttd access control' | |
2016-04-28T04:44:01.0218 () [info] Started 'emqttd system monitor' | |
mqtt listen on 127.0.0.1:1883 with 16 acceptors. | |
2016-04-28T04:44:01.0249 () [info] Erlang MQTT Broker 0.13.1 is running now | |
2016-04-28T04:44:01.0250 (Cog.TokenReaper:55) [info] Scheduling next expired token reaping for approximately 0 hours from now | |
2016-04-28T04:44:01.0262 (Carrier.CredentialManager:36) [info] ready. | |
2016-04-28T04:44:01.0388 (Carrier.Messaging.Connection:63) [info] Connection #PID<0.586.0> connected to message bus | |
2016-04-28T04:44:01.0388 (Cog.Relay.Relays:66) [info] Starting | |
2016-04-28T04:44:01.0390 (Carrier.Messaging.Connection:63) [info] Connection #PID<0.591.0> connected to message bus | |
2016-04-28T04:44:01.0390 (Cog.Relay.Info:31) [info] Starting relay information service | |
2016-04-28T04:44:01.0391 (Cog.Bundle.Embedded:56) [info] Announcing embedded bundle | |
2016-04-28T04:44:02.0659 (Cog.Repo:2) [debug] SELECT b0."id", b0."name", b0."version", b0."config_file", b0."enabled", b0."inserted_at", b0."updated_at" FROM "bundles" AS b0 WHERE (b0."name" = $1) ["operable"] OK query=1255.7ms queue=3.9ms | |
2016-04-28T04:44:02.0659 (Cog.Relay.Relays:199) [info] Installing bundle: "operable" | |
2016-04-28T04:44:02.0904 (Cog.Repo:2) [debug] BEGIN [] OK query=244.9ms queue=0.1ms | |
2016-04-28T04:44:02.0965 (Cog.Repo:2) [debug] DELETE FROM "tokens" AS t0 WHERE ((t0."inserted_at"::timestamp + ($1::numeric * interval '1 second'))::timestamp <= $2) [#Decimal<604800>, {{2016, 4, 28}, {4, 44, 2, 0}}] OK query=714.1ms queue=0.3ms | |
2016-04-28T04:44:02.0965 (Cog.TokenReaper:65) [info] No expired tokens to delete | |
2016-04-28T04:44:02.0965 (Cog.TokenReaper:55) [info] Scheduling next expired token reaping for approximately 24 hours from now | |
2016-04-28T04:44:03.0444 (Cog.Repo:2) [debug] INSERT INTO "bundles" ("id", "inserted_at", "updated_at", "config_file", "enabled", "name", "version") VALUES ($1, $2, $3, $4, $5, $6, $7) [<<48, 212, 191, 65, 139, 174, 77, 84, 173, 185, 46, 93, 61, 233, 194, 105>>, {{2016, 4, 28}, {4, 44, 2, 0}}, {{2016, 4, 28}, {4, 44, 2, 0}}, %{"commands" => %{"alias" => %{"documentation" => "Manages aliases\n\nSubcommands\n* new <alias-name> <alias-definition> -- creates a new alias visible to the creating user.\n* mv <alias-name> <site | user>:[new-alias-name] -- moves aliases between user and site visibility. Optionally renames aliases.\n* rm <alias-name> -- Removes aliases\n* ls [pattern] -- Returns the list of aliases optionally filtered by pattern. Pattern support basic wildcards with '*'.\n\n## Example\n\n @bot operable:alias new my-awesome-alias \"echo \"My Awesome Alias\"\"\n > user:my-awesome-alias has been created\n\n @bot operable:alias mv my-awesome-alias site:awesome-alias\n > Moved user:my-awesome-alias to site:awesome-alias\n\n @bot operable:alias rm awesome-alias\n > Removed site:awesome-alias\n\n @bot operable:alias ls\n > Name: 'my-awesome-alias'\n Visibility: 'user'\n Pipeline: 'echo my-awesome-alias'\n\n Name: 'my-other-awesome-alias'\n Visibility: 'site'\n Pipeline: 'echo my-other-awesome-alias'\n", "enforcing" => false, "execution" => "multiple", "module" => "Cog.Commands.Alias", "options" => %{}, "rules" => []}, "bundle" => %{"documentation" => "\n## Overview\n\nManipulate and interrogate command bundle status.\n\nA bundle may be either `enabled` or `disabled`. If a bundle is\nenabled, chat invocations of commands contained within the bundle\nwill be executed. If the bundle is disabled, on the other hand, no\nsuch commands will be run.\n\nBundles may be enabled or disabled independently of whether or not\nany Relays are currently _running_ the bundles. The status of a\nbundle is managed centrally; when a Relay serving the bundle comes\nonline, the status of the bundle is respected. Thus a bundle may be\nenabled, but not running on any Relays, just as it can be disabled,\nbut running on _every_ Relay.\n\nThis can be used to either quickly disable a bundle, or as the first\nstep in deleting a bundle from the bot.\n\nNote that the `operable` bundle is a protected bundle;\nthis bundle is always enabled and is in fact embedded in the bot\nitself. Core pieces of bot functionality would not work (including\nthis very command itself!) if this bundle were ever disabled (though\nmany functions would remain available via the REST API). As a\nresult, calling either of the mutator subcommands `enable` or\n`disable` (see below) on the `operable` bundle is an\nerror.\n\n## Subcommands\n\n* `status`\n\n bundle status <bundle_name>\n\n Shows the current status of the bundle, whether `enabled` or\n `disabled`. Additionally shows which Relays (if any) are running\n the code for the bundle.\n\n The `enable` and `disable` subcommands (see below) also return\n this information.\n\n Can be called on any bundle, including `operable`.\n\n* `enable`\n\n bundle enable <bundle_name>\n\n Enabling a bundle allows chat commands to be routed to it. Running\n this subcommand has no effect if a bundle is already enabled.\n\n Cannot be used on the `operable` bundle.\n\n* `disable`\n\n bundle disable <bundle_name>\n\n Disabling a bundle prevents commands from being routed to it. The\n bundle is not uninstalled, and all custom rules remain\n intact. The bundle still exists, but commands in it will not be\n executed.\n\n A disabled bundle can be re-enabled using this the `enable`\n sub-command; see above.\n\n Running this subcommand has no effect if a bundle is already\n disabled.\n\n Cannot be used on the `operable` bundle.\n\n", "enforcing" => true, "execution" => "multiple", "module" => "Cog.Commands.Bundle", "options" => %{}, "rules" => ["when command is operable:bundle must have operable:manage_commands"]}, "echo" => %{"documentation" => "Repeats whatever it is passed.\n\n## Example\n\n @bot operable:echo this is nifty\n > this if nifty\n\n", "enforcing" => false, "execution" => "multiple", "module" => "Cog.Commands.Echo", "options" => %{}, "rules" => []}, "filter" => %{"documentation" => "Filters a collection where the `path` equals the `matches`.\nThe `path` option is the key that you would like to focus on;\nThe `matches` option is the value that you are searching for.\n\n## Example\n\n @bot operable:rules --list --for-command=\"operable:permissions\" | operable:filter --path=\"rule\" --matches=\"/manage_users/\"\n > { \"id\": \"91edb472-04cf-4bca-ba05-e51b63f26758\",\n \"rule\": \"operable:manage_users\",\n \"command\": \"operable:permissions\" }\n @bot operable:seed --list --for-command=\"operable:permissions\" | operable:filter --path=\"rule\" --matches=\"/manage_users/\"\n > { \"id\": \"91edb472-04cf-4bca-ba05-e51b63f26758\",\n \"rule\": \"operable:manage_users\",\n \"command\": \"operable:permissions\" }\n @bot operable:seed '[{\"foo\":{\"bar.qux\":{\"baz\":\"stuff\"}}}, {\"foo\": {\"bar\":{\"baz\":\"me\"}}}]' | operable:filter --path=\"foo.bar.baz\"\"\n > [ {\"foo\": {\"bar.qux\": {\"baz\": \"stuff\"} } }, {\"foo\": {\"bar\": {\"baz\": \"me\"} } } ]\n @bot operable:seed '[{\"foo\":{\"bar.qux\":{\"baz\":\"stuff\"}}}, {\"foo\": {\"bar\":{\"baz\":\"me\"}}}]' | operable:filter --path=\"foo.\\\"bar.qux\\\".baz\"\"\n > { \"foo\": {\"bar.qux\": {\"baz\": \"stuff\"} } }\n\n", "enforcing" => false, "execution" => "multiple", "module" => "Cog.Commands.Filter", "options" => %{"matches" => %{"required" => false, "type" => "string"}, "path" => %{"required" => false, "type" => "string"}}, "rules" => []}, "greet" => %{"documentation" => "Introduce the bot to new coworkers!\n\n## Example\n\n @bot operable:greet @new_hire\n > Hello @new_hire\n > I'm Cog! I can do lots of things ...\n\n", "enforcing" => false, "execution" => "multiple", "module" => "Cog.Commands.Greet", "options" => %{}, "rules" => []}, "group" => %{"documentation" => "This command allows the user to manage groups of users.\n\nUsage:\n group --create <groupname>\n group --drop <groupname>\n group --add --user=<username> <groupname>\n group --remove --user=<username> <groupname>\n group --list\nExamples:\n> @bot operable:group --create ops\n> @bot operable:group --create engineering\n> @bot operable:group --add --user=bob ops\n> @bot operable:group --remove --user=bob ops\n> @bot operable:group --drop ops\n> @bot operable:group --list\n", "enforcing" => true, "execution" => "multiple", "module" => "Cog.Commands.Group", "options" => %{"add" => %{"required" => false, "type" => "bool"}, "create" => %{"required" => false, "type" => "bool"}, "drop" => %{"required" => false, "type" => "bool"}, "list" => %{"required" => false, "type" => "bool"}, "remove" => %{"required" => false, "type" => "bool"}, "user" => %{"required" => false, "type" => "string"}}, "rules" => ["when command is operable:group with option[add] == true must have operable:manage_users", "when command is operable:group with option[create] == true must have operable:manage_groups", "when command is operable:group with option[drop] == true must have operable:manage_groups", "when command is operable:group with option[list] == true must have operable:manage_groups", "when command is operable:group with option[remove] == true must have operable:manage_users"]}, "help" => %{"documentation" => "Get help on all installed Cog bot commands.\n\n * `@bot operable:help` - list all enabled commands\n * `@bot operable:help --disabled` - list all disabled commands\n * `@bot operable:help --all` - list all known commands, enabled and disabled\n * `@bot operable:help \"operable:help\"` - list help for a specific command\n\n", "enforcing" => false, "execution" => "multiple", "module" => "Cog.Commands.Help", "options" => %{"all" => %{"required" => false, "type" => "bool"}, "disabled" => %{"required" => false, "type" => "bool"}}, "rules" => []}, "max" => %{" (truncated) | |
2016-04-28T04:44:03.0690 (Cog.Repo:2) [debug] INSERT INTO "namespaces" ("id", "bundle_id", "name") VALUES ($1, $2, $3) [<<31, 82, 162, 125, 115, 73, 69, 53, 167, 248, 252, 114, 233, 82, 237, 253>>, <<48, 212, 191, 65, 139, 174, 77, 84, 173, 185, 46, 93, 61, 233, 194, 105>>, "operable"] OK query=245.4ms | |
2016-04-28T04:44:03.0940 (Cog.Repo:2) [debug] INSERT INTO "permissions" ("id", "name", "namespace_id") VALUES ($1, $2, $3) [<<95, 125, 37, 188, 56, 217, 70, 241, 154, 115, 123, 56, 83, 102, 132, 233>>, "manage_commands", <<31, 82, 162, 125, 115, 73, 69, 53, 167, 248, 252, 114, 233, 82, 237, 253>>] OK query=249.0ms | |
2016-04-28T04:44:04.0179 (Cog.Repo:2) [debug] INSERT INTO "permissions" ("id", "name", "namespace_id") VALUES ($1, $2, $3) [<<76, 184, 236, 161, 247, 230, 67, 231, 183, 223, 60, 108, 183, 171, 214, 215>>, "manage_groups", <<31, 82, 162, 125, 115, 73, 69, 53, 167, 248, 252, 114, 233, 82, 237, 253>>] OK query=238.8ms | |
2016-04-28T04:44:04.0420 (Cog.Repo:2) [debug] INSERT INTO "permissions" ("id", "name", "namespace_id") VALUES ($1, $2, $3) [<<43, 14, 160, 93, 20, 80, 67, 64, 134, 205, 182, 252, 50, 223, 154, 23>>, "manage_permissions", <<31, 82, 162, 125, 115, 73, 69, 53, 167, 248, 252, 114, 233, 82, 237, 253>>] OK query=241.2ms | |
2016-04-28T04:44:04.0670 (Cog.Repo:2) [debug] INSERT INTO "permissions" ("id", "name", "namespace_id") VALUES ($1, $2, $3) [<<106, 161, 12, 234, 142, 62, 78, 95, 129, 13, 25, 208, 224, 178, 250, 74>>, "manage_roles", <<31, 82, 162, 125, 115, 73, 69, 53, 167, 248, 252, 114, 233, 82, 237, 253>>] OK query=249.8ms | |
2016-04-28T04:44:04.0912 (Cog.Repo:2) [debug] INSERT INTO "permissions" ("id", "name", "namespace_id") VALUES ($1, $2, $3) [<<63, 134, 225, 13, 53, 176, 69, 63, 148, 108, 223, 86, 154, 120, 216, 153>>, "manage_users", <<31, 82, 162, 125, 115, 73, 69, 53, 167, 248, 252, 114, 233, 82, 237, 253>>] OK query=241.6ms | |
2016-04-28T04:44:05.0157 (Cog.Repo:2) [debug] INSERT INTO "permissions" ("id", "name", "namespace_id") VALUES ($1, $2, $3) [<<204, 163, 20, 206, 45, 59, 70, 14, 187, 83, 41, 25, 52, 126, 35, 160>>, "manage_relays", <<31, 82, 162, 125, 115, 73, 69, 53, 167, 248, 252, 114, 233, 82, 237, 253>>] OK query=244.4ms | |
2016-04-28T04:44:05.0405 (Cog.Repo:2) [debug] INSERT INTO "permissions" ("id", "name", "namespace_id") VALUES ($1, $2, $3) [<<49, 11, 209, 102, 134, 172, 79, 235, 189, 79, 144, 193, 46, 3, 197, 77>>, "manage_triggers", <<31, 82, 162, 125, 115, 73, 69, 53, 167, 248, 252, 114, 233, 82, 237, 253>>] OK query=248.2ms | |
2016-04-28T04:44:05.0652 (Cog.Repo:2) [debug] INSERT INTO "commands" ("id", "bundle_id", "documentation", "enforcing", "execution", "name") VALUES ($1, $2, $3, $4, $5, $6) [<<23, 50, 134, 247, 170, 189, 79, 124, 175, 244, 247, 146, 58, 14, 86, 211>>, <<48, 212, 191, 65, 139, 174, 77, 84, 173, 185, 46, 93, 61, 233, 194, 105>>, "Manages aliases\n\nSubcommands\n* new <alias-name> <alias-definition> -- creates a new alias visible to the creating user.\n* mv <alias-name> <site | user>:[new-alias-name] -- moves aliases between user and site visibility. Optionally renames aliases.\n* rm <alias-name> -- Removes aliases\n* ls [pattern] -- Returns the list of aliases optionally filtered by pattern. Pattern support basic wildcards with '*'.\n\n## Example\n\n @bot operable:alias new my-awesome-alias \"echo \"My Awesome Alias\"\"\n > user:my-awesome-alias has been created\n\n @bot operable:alias mv my-awesome-alias site:awesome-alias\n > Moved user:my-awesome-alias to site:awesome-alias\n\n @bot operable:alias rm awesome-alias\n > Removed site:awesome-alias\n\n @bot operable:alias ls\n > Name: 'my-awesome-alias'\n Visibility: 'user'\n Pipeline: 'echo my-awesome-alias'\n\n Name: 'my-other-awesome-alias'\n Visibility: 'site'\n Pipeline: 'echo my-other-awesome-alias'\n", false, "multiple", "alias"] OK query=245.9ms | |
2016-04-28T04:44:06.0023 (Cog.Repo:2) [debug] INSERT INTO "commands" ("id", "bundle_id", "documentation", "enforcing", "execution", "name") VALUES ($1, $2, $3, $4, $5, $6) [<<24, 170, 65, 53, 156, 45, 73, 203, 136, 217, 229, 5, 90, 89, 219, 75>>, <<48, 212, 191, 65, 139, 174, 77, 84, 173, 185, 46, 93, 61, 233, 194, 105>>, "\n## Overview\n\nManipulate and interrogate command bundle status.\n\nA bundle may be either `enabled` or `disabled`. If a bundle is\nenabled, chat invocations of commands contained within the bundle\nwill be executed. If the bundle is disabled, on the other hand, no\nsuch commands will be run.\n\nBundles may be enabled or disabled independently of whether or not\nany Relays are currently _running_ the bundles. The status of a\nbundle is managed centrally; when a Relay serving the bundle comes\nonline, the status of the bundle is respected. Thus a bundle may be\nenabled, but not running on any Relays, just as it can be disabled,\nbut running on _every_ Relay.\n\nThis can be used to either quickly disable a bundle, or as the first\nstep in deleting a bundle from the bot.\n\nNote that the `operable` bundle is a protected bundle;\nthis bundle is always enabled and is in fact embedded in the bot\nitself. Core pieces of bot functionality would not work (including\nthis very command itself!) if this bundle were ever disabled (though\nmany functions would remain available via the REST API). As a\nresult, calling either of the mutator subcommands `enable` or\n`disable` (see below) on the `operable` bundle is an\nerror.\n\n## Subcommands\n\n* `status`\n\n bundle status <bundle_name>\n\n Shows the current status of the bundle, whether `enabled` or\n `disabled`. Additionally shows which Relays (if any) are running\n the code for the bundle.\n\n The `enable` and `disable` subcommands (see below) also return\n this information.\n\n Can be called on any bundle, including `operable`.\n\n* `enable`\n\n bundle enable <bundle_name>\n\n Enabling a bundle allows chat commands to be routed to it. Running\n this subcommand has no effect if a bundle is already enabled.\n\n Cannot be used on the `operable` bundle.\n\n* `disable`\n\n bundle disable <bundle_name>\n\n Disabling a bundle prevents commands from being routed to it. The\n bundle is not uninstalled, and all custom rules remain\n intact. The bundle still exists, but commands in it will not be\n executed.\n\n A disabled bundle can be re-enabled using this the `enable`\n sub-command; see above.\n\n Running this subcommand has no effect if a bundle is already\n disabled.\n\n Cannot be used on the `operable` bundle.\n\n", true, "multiple", "bundle"] OK query=370.1ms | |
2016-04-28T04:44:06.0287 (Cog.Repo:2) [debug] SELECT c0."id", c0."name", c0."documentation", c0."enforcing", c0."execution", c0."bundle_id" FROM "commands" AS c0 INNER JOIN "bundles" AS b1 ON b1."id" = c0."bundle_id" WHERE (b1."name" = $1) AND (c0."name" = $2) ["operable", "bundle"] OK query=241.4ms | |
2016-04-28T04:44:06.0399 (DBConnection.Connection:141) [error] Postgrex.Protocol (#PID<0.597.0>) disconnected: ** (DBConnection.Error) client down | |
2016-04-28T04:44:06.0410 () [info] Application cog exited: Cog.start(:normal, []) returned an error: shutdown: failed to start child: Cog.Relay.RelaySup | |
** (EXIT) shutdown: failed to start child: Cog.Bundle.Embedded | |
** (EXIT) exited in: GenServer.call(Cog.Relay.Relays, {:announce_embedded_relay, %{"announce" => %{"bundles" => [%{"commands" => %{"alias" => %{"documentation" => "Manages aliases\n\nSubcommands\n* new <alias-name> <alias-definition> -- creates a new alias visible to the creating user.\n* mv <alias-name> <site | user>:[new-alias-name] -- moves aliases between user and site visibility. Optionally renames aliases.\n* rm <alias-name> -- Removes aliases\n* ls [pattern] -- Returns the list of aliases optionally filtered by pattern. Pattern support basic wildcards with '*'.\n\n## Example\n\n @bot operable:alias new my-awesome-alias \"echo \"My Awesome Alias\"\"\n > user:my-awesome-alias has been created\n\n @bot operable:alias mv my-awesome-alias site:awesome-alias\n > Moved user:my-awesome-alias to site:awesome-alias\n\n @bot operable:alias rm awesome-alias\n > Removed site:awesome-alias\n\n @bot operable:alias ls\n > Name: 'my-awesome-alias'\n Visibility: 'user'\n Pipeline: 'echo my-awesome-alias'\n\n Name: 'my-other-awesome-alias'\n Visibility: 'site'\n Pipeline: 'echo my-other-awesome-alias'\n", "enforcing" => false, "execution" => "multiple", "module" => "Cog.Commands.Alias", "options" => %{}, "rules" => []}, "bundle" => %{"documentation" => "\n## Overview\n\nManipulate and interrogate command bundle status.\n\nA bundle may be either `enabled` or `disabled`. If a bundle is\nenabled, chat invocations of commands contained within the bundle\nwill be executed. If the bundle is disabled, on the other hand, no\nsuch commands will be run.\n\nBundles may be enabled or disabled independently of whether or not\nany Relays are currently _running_ the bundles. The status of a\nbundle is managed centrally; when a Relay serving the bundle comes\nonline, the status of the bundle is respected. Thus a bundle may be\nenabled, but not running on any Relays, just as it can be disabled,\nbut running on _every_ Relay.\n\nThis can be used to either quickly disable a bundle, or as the first\nstep in deleting a bundle from the bot.\n\nNote that the `operable` bundle is a protected bundle;\nthis bundle is always enabled and is in fact embedded in the bot\nitself. Core pieces of bot functionality would not work (including\nthis very command itself!) if this bundle were ever disabled (though\nmany functions would remain available via the REST API). As a\nresult, calling either of the mutator subcommands `enable` or\n`disable` (see below) on the `operable` bundle is an\nerror.\n\n## Subcommands\n\n* `status`\n\n bundle status <bundle_name>\n\n Shows the current status of the bundle, whether `enabled` or\n `disabled`. Additionally shows which Relays (if any) are running\n the code for the bundle.\n\n The `enable` and `disable` subcommands (see below) also return\n this information.\n\n Can be called on any bundle, including `operable`.\n\n* `enable`\n\n bundle enable <bundle_name>\n\n Enabling a bundle allows chat commands to be routed to it. Running\n this subcommand has no effect if a bundle is already enabled.\n\n Cannot be used on the `operable` bundle.\n\n* `disable`\n\n bundle disable <bundle_name>\n\n Disabling a bundle prevents commands from being routed to it. The\n bundle is not uninstalled, and all custom rules remain\n intact. The bundle still exists, but commands in it will not be\n executed.\n\n A disabled bundle can be re-enabled using this the `enable`\n sub-command; see above.\n\n Running this subcommand has no effect if a bundle is already\n disabled.\n\n Cannot be used on the `operable` bundle.\n\n", "enforcing" => true, "execution" => "multiple", "module" => "Cog.Commands.Bundle", "options" => %{}, "rules" => ["when command is operable:bundle must have operable:manage_commands"]}, "echo" => %{"documentation" => "Repeats whatever it is passed.\n\n## Example\n\n @bot operable:echo this is nifty\n > this if nifty\n\n", "enforcing" => false, "execution" => "multiple", "module" => "Cog.Commands.Echo", "options" => %{}, "rules" => []}, "filter" => %{"documentation" => "Filters a collection where the `path` equals the `matches`.\nThe `path` option is the key that you would like to focus on;\nThe `matches` option is the value that you are searching for.\n\n## Example\n\n @bot operable:rules --list --for-command=\"operable:permissions\" | operable:filter --path=\"rule\" --matches=\"/manage_users/\"\n > { \"id\": \"91edb472-04cf-4bca-ba05-e51b63f26758\",\n \"rule\": \"operable:manage_users\",\n \"command\": \"operable:permissions\" }\n @bot operable:seed --list --for-command=\"operable:permissions\" | operable:filter --path=\"rule\" --matches=\"/manage_users/\"\n > { \"id\": \"91edb472-04cf-4bca-ba05-e51b63f26758\",\n \"rule\": \"operable:manage_users\",\n \"command\": \"operable:permissions\" }\n @bot operable:seed '[{\"foo\":{\"bar.qux\":{\"baz\":\"stuff\"}}}, {\"foo\": {\"bar\":{\"baz\":\"me\"}}}]' | operable:filter --path=\"foo.bar.baz\"\"\n > [ {\"foo\": {\"bar.qux\": {\"baz\": \"stuff\"} } }, {\"foo\": {\"bar\": {\"baz\": \"me\"} } } ]\n @bot operable:seed '[{\"foo\":{\"bar.qux\":{\"baz\":\"stuff\"}}}, {\"foo\": {\"bar\":{\"baz\":\"me\"}}}]' | operable:filter --path=\"foo.\\\"bar.qux\\\".baz\"\"\n > { \"foo\": {\"bar.qux\": {\"baz\": \"stuff\"} } }\n\n", "enforcing" => false, "execution" => "multiple", "module" => "Cog.Commands.Filter", "options" => %{"matches" => %{"required" => false, "type" => "string"}, "path" => %{"required" => false, "type" => "string"}}, "rules" => []}, "greet" => %{"documentation" => "Introduce the bot to new coworkers!\n\n## Example\n\n @bot operable:greet @new_hire\n > Hello @new_hire\n > I'm Cog! I can do lots of things ...\n\n", "enforcing" => false, "execution" => "multiple", "module" => "Cog.Commands.Greet", "options" => %{}, "rules" => []}, "group" => %{"documentation" => "This command allows the user to manage groups of users.\n\nUsage:\n group --create <groupname>\n group --drop <groupname>\n group --add --user=<username> <groupname>\n group --remove --user=<username> <groupname>\n group --list\nExamples:\n> @bot operable:group --create ops\n> @bot operable:group --create engineering\n> @bot operable:group --add --user=bob ops\n> @bot operable:group --remove --user=bob ops\n> @bot operable:group --drop ops\n> @bot operable:group --list\n", "enforcing" => true, "execution" => "multiple", "module" => "Cog.Commands.Group", "options" => %{"add" => %{"required" => false, "type" => "bool"}, "create" => %{"required" => false, "type" => "bool"}, "drop" => %{"required" => false, "type" => "bool"}, "list" => %{"required" => false, "type" => "bool"}, "remove" => %{"required" => false, "type" => "bool"}, "user" => %{"required" => false, "type" => "string"}}, "rules" => ["when command is operable:group with option[add] == true must have operable:manage_users", "when command is operable:group with option[create] == true must have operable:manage_groups", "when command is operable:group with option[drop] == true must have operable:manage_groups", "when command is operable:group with option[list] == true must have operable:manage_groups", "when command is operable:group with option[remove] == true must have operable:manage_users"]}, "help" => %{"documentation" => "Get help on all installed Cog bot commands.\n\n * `@bot operable:help` - list all enabled commands\n * `@bot operable:help --disabled` - list all disabled commands\n * `@bot operable:help --all` - list all known commands, enabled and disabled\n * `@bot operable:help \"operable:help\"` - list help for a specific command\n\n", "enforcing" => false, "execution" => "multiple", "module" => "Cog.Commands.Help", "options" => %{"all" => %{"required" => false, "type" => "bool"}, "disabled" => %{"required" => false, "type" => "bool"}}, "ru (truncated) | |
2016-04-28T04:44:06.0410 () [info] Application exirc exited: :stopped | |
2016-04-28T04:44:06.0410 () [info] Application spanner exited: :stopped | |
2016-04-28T04:44:06.0410 () [info] Application porcelain exited: :stopped | |
2016-04-28T04:44:06.0410 () [info] Application yaml_elixir exited: :stopped | |
2016-04-28T04:44:06.0411 () [info] Application yamerl exited: :stopped | |
2016-04-28T04:44:06.0411 () [info] Application comeonin exited: :stopped | |
2016-04-28T04:44:06.0411 () [info] Application phoenix_html exited: :stopped | |
2016-04-28T04:44:06.0412 () [info] Application postgrex exited: :stopped | |
2016-04-28T04:44:06.0412 () [info] Application db_connection exited: :stopped | |
2016-04-28T04:44:06.0413 () [info] Application connection exited: :stopped | |
2016-04-28T04:44:06.0413 () [info] Application phoenix_ecto exited: :stopped | |
2016-04-28T04:44:06.0413 () [info] Application ecto exited: :stopped | |
2016-04-28T04:44:06.0413 () [info] Application poolboy exited: :stopped | |
2016-04-28T04:44:06.0413 () [info] Application decimal exited: :stopped | |
2016-04-28T04:44:06.0414 () [info] Application phoenix exited: :stopped | |
2016-04-28T04:44:06.0414 () [info] Application eex exited: :stopped | |
2016-04-28T04:44:06.0414 () [info] Application poison exited: :stopped | |
2016-04-28T04:44:06.0414 () [info] Application plug exited: :stopped | |
2016-04-28T04:44:06.0415 () [info] Application cowboy exited: :stopped | |
2016-04-28T04:44:06.0415 () [info] Application cowlib exited: :stopped | |
2016-04-28T04:44:06.0416 () [info] Application ranch exited: :stopped | |
2016-04-28T04:44:06.0416 () [info] Application slack exited: :stopped | |
2016-04-28T04:44:06.0416 () [info] Application exjsx exited: :stopped | |
2016-04-28T04:44:06.0416 () [info] Application jsx exited: :stopped | |
2016-04-28T04:44:06.0416 () [info] Application httpoison exited: :stopped | |
2016-04-28T04:44:06.0416 () [info] Application hackney exited: :stopped | |
2016-04-28T04:44:06.0416 () [info] Application metrics exited: :stopped | |
2016-04-28T04:44:06.0417 () [info] Application ssl_verify_fun exited: :stopped | |
stopped mqtt on 127.0.0.1:1883 | |
2016-04-28T04:44:06.0417 () [info] Application certifi exited: :stopped | |
2016-04-28T04:44:06.0417 () [info] Application mimerl exited: :stopped | |
2016-04-28T04:44:06.0417 () [info] Application idna exited: :stopped | |
2016-04-28T04:44:06.0417 () [info] Application hedwig exited: :stopped | |
2016-04-28T04:44:06.0417 () [info] Application exml exited: :stopped | |
2016-04-28T04:44:06.0418 () [info] Application esockd exited: :stopped | |
2016-04-28T04:44:06.0419 () [info] Application gproc exited: :stopped | |
2016-04-28T04:44:06.0419 () [info] Application httpotion exited: :stopped | |
2016-04-28T04:44:06.0420 () [info] Application ibrowse exited: :stopped | |
2016-04-28T04:44:06.0420 () [info] Application logger_file_backend exited: :stopped | |
2016-04-28T04:44:06.0420 () [info] Application probe exited: :stopped | |
=INFO REPORT==== 28-Apr-2016::04:44:06 === | |
application: logger | |
exited: stopped | |
type: temporary | |
** (Mix) Could not start application cog: Cog.start(:normal, []) returned an error: shutdown: failed to start child: Cog.Relay.RelaySup | |
** (EXIT) shutdown: failed to start child: Cog.Bundle.Embedded | |
** (EXIT) exited in: GenServer.call(Cog.Relay.Relays, {:announce_embedded_relay, %{"announce" => %{"bundles" => [%{"commands" => %{"alias" => %{"documentation" => "Manages aliases\n\nSubcommands\n* new <alias-name> <alias-definition> -- creates a new alias visible to the creating user.\n* mv <alias-name> <site | user>:[new-alias-name] -- moves aliases between user and site visibility. Optionally renames aliases.\n* rm <alias-name> -- Removes aliases\n* ls [pattern] -- Returns the list of aliases optionally filtered by pattern. Pattern support basic wildcards with '*'.\n\n## Example\n\n @bot operable:alias new my-awesome-alias \"echo \"My Awesome Alias\"\"\n > user:my-awesome-alias has been created\n\n @bot operable:alias mv my-awesome-alias site:awesome-alias\n > Moved user:my-awesome-alias to site:awesome-alias\n\n @bot operable:alias rm awesome-alias\n > Removed site:awesome-alias\n\n @bot operable:alias ls\n > Name: 'my-awesome-alias'\n Visibility: 'user'\n Pipeline: 'echo my-awesome-alias'\n\n Name: 'my-other-awesome-alias'\n Visibility: 'site'\n Pipeline: 'echo my-other-awesome-alias'\n", "enforcing" => false, "execution" => "multiple", "module" => "Cog.Commands.Alias", "options" => %{}, "rules" => []}, "bundle" => %{"documentation" => "\n## Overview\n\nManipulate and interrogate command bundle status.\n\nA bundle may be either `enabled` or `disabled`. If a bundle is\nenabled, chat invocations of commands contained within the bundle\nwill be executed. If the bundle is disabled, on the other hand, no\nsuch commands will be run.\n\nBundles may be enabled or disabled independently of whether or not\nany Relays are currently _running_ the bundles. The status of a\nbundle is managed centrally; when a Relay serving the bundle comes\nonline, the status of the bundle is respected. Thus a bundle may be\nenabled, but not running on any Relays, just as it can be disabled,\nbut running on _every_ Relay.\n\nThis can be used to either quickly disable a bundle, or as the first\nstep in deleting a bundle from the bot.\n\nNote that the `operable` bundle is a protected bundle;\nthis bundle is always enabled and is in fact embedded in the bot\nitself. Core pieces of bot functionality would not work (including\nthis very command itself!) if this bundle were ever disabled (though\nmany functions would remain available via the REST API). As a\nresult, calling either of the mutator subcommands `enable` or\n`disable` (see below) on the `operable` bundle is an\nerror.\n\n## Subcommands\n\n* `status`\n\n bundle status <bundle_name>\n\n Shows the current status of the bundle, whether `enabled` or\n `disabled`. Additionally shows which Relays (if any) are running\n the code for the bundle.\n\n The `enable` and `disable` subcommands (see below) also return\n this information.\n\n Can be called on any bundle, including `operable`.\n\n* `enable`\n\n bundle enable <bundle_name>\n\n Enabling a bundle allows chat commands to be routed to it. Running\n this subcommand has no effect if a bundle is already enabled.\n\n Cannot be used on the `operable` bundle.\n\n* `disable`\n\n bundle disable <bundle_name>\n\n Disabling a bundle prevents commands from being routed to it. The\n bundle is not uninstalled, and all custom rules remain\n intact. The bundle still exists, but commands in it will not be\n executed.\n\n A disabled bundle can be re-enabled using this the `enable`\n sub-command; see above.\n\n Running this subcommand has no effect if a bundle is already\n disabled.\n\n Cannot be used on the `operable` bundle.\n\n", "enforcing" => true, "execution" => "multiple", "module" => "Cog.Commands.Bundle", "options" => %{}, "rules" => ["when command is operable:bundle must have operable:manage_commands"]}, "echo" => %{"documentation" => "Repeats whatever it is passed.\n\n## Example\n\n @bot operable:echo this is nifty\n > this if nifty\n\n", "enforcing" => false, "execution" => "multiple", "module" => "Cog.Commands.Echo", "options" => %{}, "rules" => []}, "filter" => %{"documentation" => "Filters a collection where the `path` equals the `matches`.\nThe `path` option is the key that you would like to focus on;\nThe `matches` option is the value that you are searching for.\n\n## Example\n\n @bot operable:rules --list --for-command=\"operable:permissions\" | operable:filter --path=\"rule\" --matches=\"/manage_users/\"\n > { \"id\": \"91edb472-04cf-4bca-ba05-e51b63f26758\",\n \"rule\": \"operable:manage_users\",\n \"command\": \"operable:permissions\" }\n @bot operable:seed --list --for-command=\"operable:permissions\" | operable:filter --path=\"rule\" --matches=\"/manage_users/\"\n > { \"id\": \"91edb472-04cf-4bca-ba05-e51b63f26758\",\n \"rule\": \"operable:manage_users\",\n \"command\": \"operable:permissions\" }\n @bot operable:seed '[{\"foo\":{\"bar.qux\":{\"baz\":\"stuff\"}}}, {\"foo\": {\"bar\":{\"baz\":\"me\"}}}]' | operable:filter --path=\"foo.bar.baz\"\"\n > [ {\"foo\": {\"bar.qux\": {\"baz\": \"stuff\"} } }, {\"foo\": {\"bar\": {\"baz\": \"me\"} } } ]\n @bot operable:seed '[{\"foo\":{\"bar.qux\":{\"baz\":\"stuff\"}}}, {\"foo\": {\"bar\":{\"baz\":\"me\"}}}]' | operable:filter --path=\"foo.\\\"bar.qux\\\".baz\"\"\n > { \"foo\": {\"bar.qux\": {\"baz\": \"stuff\"} } }\n\n", "enforcing" => false, "execution" => "multiple", "module" => "Cog.Commands.Filter", "options" => %{"matches" => %{"required" => false, "type" => "string"}, "path" => %{"required" => false, "type" => "string"}}, "rules" => []}, "greet" => %{"documentation" => "Introduce the bot to new coworkers!\n\n## Example\n\n @bot operable:greet @new_hire\n > Hello @new_hire\n > I'm Cog! I can do lots of things ...\n\n", "enforcing" => false, "execution" => "multiple", "module" => "Cog.Commands.Greet", "options" => %{}, "rules" => []}, "group" => %{"documentation" => "This command allows the user to manage groups of users.\n\nUsage:\n group --create <groupname>\n group --drop <groupname>\n group --add --user=<username> <groupname>\n group --remove --user=<username> <groupname>\n group --list\nExamples:\n> @bot operable:group --create ops\n> @bot operable:group --create engineering\n> @bot operable:group --add --user=bob ops\n> @bot operable:group --remove --user=bob ops\n> @bot operable:group --drop ops\n> @bot operable:group --list\n", "enforcing" => true, "execution" => "multiple", "module" => "Cog.Commands.Group", "options" => %{"add" => %{"required" => false, "type" => "bool"}, "create" => %{"required" => false, "type" => "bool"}, "drop" => %{"required" => false, "type" => "bool"}, "list" => %{"required" => false, "type" => "bool"}, "remove" => %{"required" => false, "type" => "bool"}, "user" => %{"required" => false, "type" => "string"}}, "rules" => ["when command is operable:group with option[add] == true must have operable:manage_users", "when command is operable:group with option[create] == true must have operable:manage_groups", "when command is operable:group with option[drop] == true must have operable:manage_groups", "when command is operable:group with option[list] == true must have operable:manage_groups", "when command is operable:group with option[remove] == true must have operable:manage_users"]}, "help" => %{"documentation" => "Get help on all installed Cog bot commands.\n\n * `@bot operable:help` - list all enabled commands\n * `@bot operable:help --disabled` - list all disabled commands\n * `@bot operable:help --all` - list all known commands, enabled and disabled\n * `@bot operable:help \"operable:help\"` - list help for a specific command\n\n", "enforcing" => false, "execution" => "multiple", "module" => "Cog.Commands.Help", "options" => %{"all" => %{"required" => false, "type" => "bool"}, "disabled" => %{"required" => false, "type" => "bool"}}, "rules" => []}, "max" => %{"documentation" => "This command allows the user to determine the maximum value given a\nlist of inputs.\n\nExamples:\n> @bot operable:max 49 9 2 2\n> @bot operable:max 0.48 0.2 1.8 3548.4 0.078\n> @bot operable:max \"apple\" \"ball\" \"car\" \"zebra\"\n", "enforcing" => false, "execution" => "multiple", "module" => "Cog.Commands.Max", "options" => %{}, "rules" => []}, "min" => %{"documentation" => "This command allows the user to determine the minimum value given a\nlist of inputs.\n\nExamples:\n> @bot operable:min 49 9 2 2\n> @bot operable:min 0.48 0.2 1.8 3548.4 0.078\n> @bot operable:min \"apple\" \"ball\" \"car\" \"zebra\"\n", "enforcing" => false, "execution" => "multiple", "module" => "Cog.Commands.Min", "options" => %{}, "rules" => []}, "permissions" => %{"documentation" => "Manipulate authorization permissions.\n\n* Create permissions in the `site` namespace\n* Delete permissions in the `site` namespace\n* List all permissions in the system\n* Grant and revoke permissions from roles.\n\nFormat:\n\n --list\n --create --permission=site:<name>\n --delete --permission=site:<name>\n --grant --permission=<namespace>:<permission> --role=<name>\"\n --revoke --permission=<namespace>:<permission> --role=<name>\"\n\nExamples:\n\n> !operable:permissions --list\n> !operable:permissions --create --permission=site:admin\n> !operable:permissions --delete --permission=site:admin\n> !operable:permissions --grant --role=dev --permission=site:write\n> !operable:permissions --revoke --role=dev --permission=giphy:giphy\n\n", "enforcing" => true, "execution" => "multiple", "module" => "Cog.Commands.Permissions", "options" => %{"create" => %{"required" => false, "type" => "bool"}, "delete" => %{"required" => false, "type" => "bool"}, "grant" => %{"required" => false, "type" => "bool"}, "list" => %{"required" => false, "type" => "bool"}, "permission" => %{"required" => false, "type" => "string"}, "revoke" => %{"required" => false, "type" => "bool"}, "role" => %{"required" => false, "type" => "string"}}, "rules" => ["when command is operable:permissions with option[create] == true must have operable:manage_permissions", "when command is operable:permissions with option[delete] == true must have operable:manage_permissions", "when command is operable:permissions with option[grant] == true must have operable:manage_roles", "when command is operable:permissions with option[list] == true must have operable:manage_permissions", "when command is operable:permissions with option[revoke] == true must have operable:manage_roles"]}, "raw" => %{"documentation" => "Show the raw output of a command, exclusive of any templating.\n\nUseful for seeing the difference between `multiple` and `once`\nexecution modes, as well as seeing which fields are available for\nuse in `bound` and `all` calling conventions.\n\nAlso useful as a debugging tool for command authors.\n\nExample:\n\n @bot operable:echo foo | operable:raw\n > {\n \"body\": [\n \"foo\"\n ]\n }\n\n", "enforcing" => false, "execution" => "multiple", "module" => "Cog.Command.Raw", "options" => %{}, "rules" => []}, "role" => %{"documentation" => "This command allows the user to manage roles.\n\nUsage:\n role --create <rolename>\n role --drop <rolename>\n role --grant --group=<groupname> <rolename>\n role --revoke --group=<groupname> <rolename>\n role --list\nExamples:\n> @bot operable:role --create deployment\n> @bot operable:role --grant --group=ops deployment\n> @bot operable:role --revoke --group=ops deployment\n> @bot operable:role --drop deployment\n> @bot operable:role --list\n", "enforcing" => true, "execution" => "multiple", "module" => "Cog.Commands.Role", "options" => %{"create" => %{"required" => false, "type" => "bool"}, "drop" => %{"required" => false, "type" => "bool"}, "grant" => %{"required" => false, "type" => "bool"}, "group" => %{"required" => false, "type" => "string"}, "list" => %{"required" => false, "type" => "bool"}, "revoke" => %{"required" => false, "type" => "bool"}}, "rules" => ["when command is operable:role with option[create] == true must have operable:manage_roles", "when command is operable:role with option[drop] == true must have operable:manage_roles", "when command is operable:role with option[grant] == true must have operable:manage_groups", "when command is operable:role with option[list] == true must have operable:manage_roles", "when command is operable:role with option[revoke] == true must have operable:manage_groups"]}, "rules" => %{"documentation" => "This command allows the user to manage rules for commands.\n\nFormat:\n Rules -\n rules --add \"when command is <full_command_name> must have <namespace>:<permission>\"\n rules --add --for-command=<full_command_name> --permission=<namespace>:<permission>\n rules --list --for-command=<full_command_name>\n rules --drop --for-command=<full_command_name>\n rules --drop --id=<rule_id>\n\nExamples:\n> @bot operable:rules --add \"when command is operable:ec2-terminate must have operable:ec2\"\n", "enforcing" => true, "execution" => "multiple", "module" => "Cog.Commands.Rules", "options" => %{"add" => %{"required" => false, "type" => "bool"}, "drop" => %{"required" => false, "type" => "bool"}, "for-command" => %{"required" => false, "type" => "string"}, "id" => %{"required" => false, "type" => "string"}, "list" => %{"required" => false, "type" => "bool"}, "permission" => %{"required" => false, "type" => "string"}}, "rules" => ["when command is operable:rules must have operable:manage_commands"]}, "seed" => %{"documentation" => "Seed a pipeline with arbitrary data.\n\nAccepts a single string argument, which must be valid JSON for\neither a map or a list of maps.\n\nThough some values may be able to be typed without enclosing quotes,\nit is highly recommended to single-quote your entire string.\n\nBest used for debugging and experimentation.\n\nExamples:\n\n !seed '{\"thing\":\"stuff\"}' | echo $thing\n > stuff\n\n !seed '[{\"thing\":\"stuff\"},{\"thing\":\"more stuff\"}]' | echo $thing\n > stuff\n > more stuff\n\n", "enforcing" => false, "execution" => "multiple", "module" => "Cog.Command.Seed", "options" => %{}, "rules" => []}, "sleep" => %{"documentation" => "Sleep for a configurable number of seconds. Useful\nfor testing timeout handling in executor logic.\n\nPasses COG_ENV through unchanged.\n\nNote, however, that invocations of this command are still subject to\nthe current per-invocation timeout in the executor (1 minute).\n\nCurrently useful mainly for debugging purposes.\n\nExample:\n\n !echo \"Get up and stretch\" | sleep 10 | echo $body > me`\n\n", "enforcing" => false, "execution" => "once", "module" => "Cog.Commands.Sleep", "options" => %{}, "rules" => []}, "sort" => %{"documentation" => "Sorts the given inputs.\n\nExamples\n @bot operable:sort 3 2 1 5 4\n > [1, 2, 3, 4, 5]\n @bot operable:sort --asc 4.5 1.8 0.032 0.6 1.5 0.4\n > [0.032, 0.4, 0.6, 1.5, 1.8, 4.5]\n @bot operable:sort --desc Life is 10 percent what happens to us and 90% how we react to it\n > [what, we, us, to, to, react, percent, it, is, how, happens, and, Life, %, 90, 10]\n @bot operable:rules --for-command=rules| sort --field=rule\n > {\n\"rule\": \"when command is operable:permissions with option[user] == /.*/ must have operable:manage_users\",\n\"id\": \"12345678-abcd-efgh-ijkl-0987654321ab\",\n\"command\": \"operable:permissions\"\n}\n{\n\"rule\": \"when command is operable:permissions with option[role] == /.*/ must have operable:manage_roles\",\n\"id\": \"87654321-mnop-qrst-uvwx-0123456789ab\",\n\"command\": \"operable:permissions\"\n}\n{\n\"rule\": \"when command is operable:permissions with option[group] == /.*/ must have operable:manage_groups\",\n\"id\": \"24680135-azby-cxdw-evfu-ab0123456789\",\n\"command\": \"operable:permissions\"\n}\n", "enforcing" => false, "execution" => "once", "module" => "Cog.Commands.Sort", "options" => %{"asc" => %{"required" => false, "type" => "bool"}, "desc" => %{"required" => false, "type" => "bool"}, "field" => %{"required" => false, "type" => "string"}}, "rules" => []}, "sum" => %{"documentation" => "This command allows the user to sum together a list of numbers\n\nExamples:\n> @bot operable:sum 2 2\n> @bot operable:sum 2 \"-9\"\n> @bot operable:sum 2 24 57 3.7 226.78\n", "enforcing" => false, "execution" => "multiple", "module" => "Cog.Commands.Sum", "options" => %{}, "rules" => []}, "table" => %{"documentation" => "Converts lists of maps into a table of columns specified.\n\n## Example\n\n @bot operable:stackoverflow vim | operable:table —fields=\"title, score\" $items\n > title score\n > What is your most productive shortcut with Vim? 1129\n > Vim clear last search highlighting 843\n > How to replace a character for a newline in Vim? 920\n\n", "enforcing" => false, "execution" => "once", "module" => "Cog.Commands.Table", "options" => %{"fields" => %{"required" => true, "type" => "list"}}, "rules" => []}, "thorn" => %{"documentation" => "This command replaces `Th` following a word boundary with þ\n\nExamples:\n> @bot operable:thorn foo-Thbar-Thbaz\n", "enforcing" => false, "execution" => "multiple", "module" => "Cog.Commands.Thorn", "options" => %{}, "rules" => []}, "unique" => %{"documentation" => "This command returns unique values given list of inputs\n\nExamples:\n> @bot operable:unique 49.3 9 2 2 42 49.3\n> @bot operable:unique \"apple\" \"apple\" \"ball\" \"car\" \"car\" \"zebra\"\n", "enforcing" => false, "execution" => "once", "module" => "Cog.Commands.Unique", "options" => %{}, "rules" => []}, "wc" => %{"documentation" => "This command allows the user to count the number of words or lines in the input string.\n wc [--words | --lines] <input string>\n\nExamples:\n> @bot wc --words \"Hey, what will we do today?\"\n> @bot wc --lines \"From time to time\nThe clouds give rest\nTo the moon-beholders.\"\n", "enforcing" => false, "execution" => "multiple", "module" => "Cog.Commands.Wc", "options" => %{"lines" => %{"required" => false, "type" => "bool"}, "words" => %{"required" => false, "type" => "bool"}}, "rules" => []}, "which" => %{"documentation" => "Determine whether a given input is a command or an alias. Returns the type of\ninput and it's bundle or visibility. In the case of aliases it also returns\nthe aliased command string. This command is only useful non fully qualified\ncommands or aliases. Fully qualified commands or aliases will return no match.\n\nNote: If a command is shadowed, it has an alias with the same name, the alias\nwill be returned.\n\n## Example\n\n @bot operable:which my-awesome-alias\n > alias - user:my-awesome-alias -> \"echo my awesome alias\"\n\n @bot operable:which an-awesome-command\n > command - operable:an-awesome-command\n\n @bot operable:which not-anything\n > No matching commands or aliases.\n", "enforcing" => false, "execution" => "multiple", "module" => "Cog.Commands.Which", "options" => %{}, "rules" => []}}, "name" => "operable", "permissions" => ["operable:manage_commands", "operable:manage_groups", "operable:manage_permissions", "operable:manage_roles", "operable:manage_users", "operable:manage_relays", "operable:manage_triggers"], "templates" => %{"alias-ls" => %{"slack" => "{{^.}}\nNo matching aliases\n{{/.}}\n{{#.}}\nName: `{{name}}`\nVisibility: `{{visibility}}`\nPipeline: `{{pipeline}}`\n{{/.}}\n"}, "alias-mv" => %{"slack" => "Successfully moved {{source.visibility}}:{{source.name}} to {{destination.visibility}}:{{destination.name}}\n"}, "alias-new" => %{"slack" => "Success, 'user:{{ name }}' has been created\"\n"}, "alias-rm" => %{"slack" => "Successfully removed '{{visibility}}:{{name}}'\n"}, "bundle" => %{"slack" => "{{#error}}\n An error occurred!\n {{error}}\n{{/error}}\n\n{{^error}}\n The bundle `{{bundle}}` is currently `{{status}}`.\n The following Relays are running the bundle:\n {{#relays}}\n * `{{.}}`\n {{/relays}}\n {{^relays}}None!{{/relays}}\n{{/error}}\n"}, "filter" => %{"slack" => "{{^.}}No items found{{/.}}\n{{#.}}\n```\n{{{.}}}\n```\n{{/.}}\n"}, "greet" => %{"slack" => "Hello {{greetee}}\nI'm Cog. I can do lots of things. To find out what, try using the `operable:help` command.\n"}, "help" => %{"slack" => "{{#command}}\n Documentation for `{{command}}`\n\n {{{documentation}}}\n{{/command}}\n\n{{^command}}\n I know about these commands:\n\n {{#commands}}\n * {{.}}\n {{/commands}}\n\n Try calling `operable:help COMMAND` to find out more.\n{{/command}}\n"}, "rules-add" => %{"slack" => "{{#.}}\nSuccess!\nAdded `{{rule}}`\nwith ID `{{id}}`\n{{/.}}\n"}, "rules-drop" => %{"slack" => "{{^.}}\nNo rules to drop.\n{{/.}}\n\n{{#.}}\nID: `{{id}}`: `{{rule}}`\n{{/.}}\n"}, "rules-list" => %{"slack" => "{{^.}}\nNo rules found.\n{{/.}}\n\n{{#.}}\nID: `{{id}}`: `{{rule}}`\n{{/.}}\n"}, "table" => %{"slack" => "```{{table}}```\n"}, "which" => %{"slack" => "{{#not_found}}\nNo matching commands or aliases.\n{{/not_found}}\n{{#type}}\n{{type}} - {{scope}}:{{name}} {{#pipeline}} -> \"{{pipeline}}\" {{/pipeline}}\n{{/type}}\n"}}, "type" => "elixir", "version" => "0.0.1"}], "online" => true, "relay" => "0955c2fa-9627-48f5-be5d-85cc9b3c3f0a", "snapshot" => true}}}, 5000) | |
** (EXIT) time out |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment