{"id":13722158,"url":"https://github.com/awgh/marvin","last_synced_at":"2026-01-12T00:00:25.276Z","repository":{"id":57703700,"uuid":"95330374","full_name":"awgh/marvin","owner":"awgh","description":"Marvin is a Slack and IRC bot, proving a mixed drinks database, hash cracking, answering machine, and Markov-chain functions.  Designed for easy cloud deployment, configurable with JSON files.","archived":false,"fork":false,"pushed_at":"2020-06-10T01:40:08.000Z","size":14239,"stargazers_count":9,"open_issues_count":2,"forks_count":6,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-05-07T14:37:46.733Z","etag":null,"topics":["booze","broadcast","drink","drinks","irc","irc-bot","marvin","md5-decryptor","mixed-drink-database","recipe","slack","slack-bot"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/awgh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-06-25T00:48:38.000Z","updated_at":"2021-08-03T19:03:45.000Z","dependencies_parsed_at":"2022-09-02T12:10:14.521Z","dependency_job_id":null,"html_url":"https://github.com/awgh/marvin","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/awgh/marvin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/awgh%2Fmarvin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/awgh%2Fmarvin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/awgh%2Fmarvin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/awgh%2Fmarvin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/awgh","download_url":"https://codeload.github.com/awgh/marvin/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/awgh%2Fmarvin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28328631,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-11T22:11:01.104Z","status":"ssl_error","status_checked_at":"2026-01-11T22:10:58.990Z","response_time":60,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["booze","broadcast","drink","drinks","irc","irc-bot","marvin","md5-decryptor","mixed-drink-database","recipe","slack","slack-bot"],"created_at":"2024-08-03T01:01:25.167Z","updated_at":"2026-01-12T00:00:25.184Z","avatar_url":"https://github.com/awgh.png","language":"Go","funding_links":[],"categories":["Chat Bots"],"sub_categories":[],"readme":"# marvin\nIRC and Slack bot from Milliways\n\n## Instructions for Ubuntu 16.04\n\n### Install go\n```\ncurl https://storage.googleapis.com/golang/go1.9.linux-amd64.tar.gz \u003e go1.9.linux-amd64.tar.gz\nsudo tar -C /usr/local -xzf go1.9.linux-amd64.tar.gz\n```\n### Add go to your environment/PATH\n```\nsudo echo -ne \"export GOPATH=$HOME/go\\nexport PATH=$PATH:/usr/local/go/bin\" \u003e\u003e /etc/profile\nsource /etc/profile\n```\n### Verify go is in your path\n`echo $PATH $GOPATH`\n\n### Create go build directories\n`mkdir -p $HOME/go/src/`\n\n### Download marvin\n```\ngo get github.com/awgh/madns\ncd $HOME/go/src\n```\n\n### Install marvin\n\nReplace /opt/marvin with the target directory of your choice.\n```\ncd $HOME/go/src\n./install.sh /opt/marvin\n```\n\n### Create Your JSON Config Files\nIn the /opt/marvin/config directory (or your custom target equivalent), create a JSON file for each chat backend you wish to connect to.\n\nAt this time, only ONE CONNECTION TO SLACK is supported, but multiple different IRC networks can be connected to at once, and you can connect to Slack at the same time as multiple IRC networks... but some features aren't completely working Slack\u003c-\u003eIRC yet.\n\n\n#### Example IRC config \nCreate a file in the config directory called \"ANYTHING.json\" and customize the following template with your own IRC information, proxy information (optional), and your free md5decrypt API credentials from md5decrypt https://md5decrypt.net/en/Api/ (optional).\n\n```\n{\n        \"Host\":\"irc.freenode.net\",\n        \"Port\":\"6697\",\n        \"Nick\":\"YOUR_NICK_HERE\",\n        \"Password\":\"YOUR_PASSWORD_HERE\",\n        \"Channel\":\"#ratnet\",\n        \"Name\":\"YOUR_NAME_HERE\",\n        \"Version\":\"IRCsome v1.0\",\n        \"Quit\":\"bye!\",\n        \n        \"ProxyEnabled\":false,\n        \"Proxy\":\"socks5://PROXY_USER:PROXY_PASSWORD@PROXY_HOST:1080\",\n        \n        \"MD5ApiUser\":\"YOUR_MD5_API_USER\",\n        \"MD5ApiCode\":\"YOUR_MD5_API_KEY\"\n}\n```\n\n#### Example Slack config \nCreate a file in the config directory called \"slack.json\" (really anything with a .json extension) and customize the following template with your own Slack information and your free md5decrypt API credentials from md5decrypt https://md5decrypt.net/en/Api/ (optional).\n\n```\n{\n        \"SlackAPIToken\":\"xorx-YOUR-SLACK-APP-API-TOKEN-HERE\",\n        \"SlackChannel\":\"SLACK_CHANNEL_ID\",\n        \n        \"MD5ApiUser\":\"YOUR_MD5_API_USER\",\n        \"MD5ApiCode\":\"YOUR_MD5_API_KEY\"\n}\n```\n\nIn order to get a Slack API token, follow the instructions to create a Marvin App for your workspace here: \nhttps://api.slack.com/apps/new \n\nIt doesn't need any special permissions, and you can name it whatever you want.  You'll mostly just click through.\n\nYou will also need to create and manage Bot Users here: \nhttps://api.slack.com/bot-users\n\nWhen that is complete, under the \"OAuth \u0026 Permissions\" tab, you will find the \"Bot User OAuth Access Token\".  This is the token you will use for the \"SlackAPIToken\" value in your Slack JSON config file.\n\nThe channel ID has to be the funky Slack channel ID string, not the human-readable channel name.  You can get this from logging into your workspace in the web browser, clicking on the target channel and looking in the URL bar, where you'll see something like this: \n```\nhttps://myworkspace.slack.com/messages/YOUR_CHANNEL_ID/details/\n```\n\nAlso, proxy support has not been implemented for Slack yet... not sure if anyone actually wants that anyway.\n\n\n### Starting Marvin\n```\ncd /opt/marvin\n./marvin\n```\n\n\n# Marvin Help\n\nMarvin responds to private messages privately and responds to channel commands as notices,\nwith the exception of the .5questions command, where the response is always broadcast to the channel.\n\nThe following commands are available:\n\n## Milliways Commands\n\n### .5questions [username]\n\n(alias: .5)\n\nwill broadcast the Five Questions, with an optional greeting for username to the channel.\n\n### .x4questions [username]\n\n(alias .x4)\n\nwill ask additional four Questions.\n\n## Mixed Drinks Database Commands\n\n### .booze [booze_name_or_prefix]\n\n(alias: .b)\n\nwill list Boozes used in the mixed drink database.  This works as a string prefix search.\nIf there is more than one match, all matches will be listed.  If no argument is given, all Boozes will be listed.\nIf only one Booze matches, the list of Drinks using that Booze will be shown.\n\n### .drink [drink_name_or_prefix]\n\n(alias: .d)\n\nwill display Drink recipes from the mixed drink database.  This works as a string prefix search.\nIf there is more than one match, all matches will be listed.  If no argument is given, all Drinks will be listed.\nIf only one Drink matches, the recipe for that drink will be shown.\n\n## Answering Machine Commands\n\n### .tell \u003cnick\u003e \u003cmessage\u003e\n\n(alias: .t)\n\nwill send a message to nick the next time they join or talk in channel.  Private tells will be sent privately.\n\n## Hash Cracking / md5decrypt Commands\n\nIf md5decrypt API credentials are provided, the following hash types can be cracked via Marvin:\n\n### .md5 [hash]\n### .md4 [hash]\n### .sha1 [hash]\n### .sha256 [hash]\n### .sha384 [hash]\n### .sha512 [hash]\n### .ntlm [hash]\n\n\n\n## Markov Chain Quote Commands\n\n### .m\n\nHear from Marvin, the paranoid android.\n\n### .mcfly\n\nFor a change of tone, hear from Marty McFly.\n\nThe quotes can be customized used the markov-gen command from this package:  https://github.com/awgh/markov\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fawgh%2Fmarvin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fawgh%2Fmarvin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fawgh%2Fmarvin/lists"}