Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save justinkinney/3f29ac4f148fb1e0bd24ec06ddb71379 to your computer and use it in GitHub Desktop.
Save justinkinney/3f29ac4f148fb1e0bd24ec06ddb71379 to your computer and use it in GitHub Desktop.
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