{"id":15282881,"url":"https://github.com/wikimedia/labs-tools-stashbot","last_synced_at":"2025-10-11T02:38:13.938Z","repository":{"id":66109461,"uuid":"74565688","full_name":"wikimedia/labs-tools-stashbot","owner":"wikimedia","description":"Mirror of https://gerrit.wikimedia.org/g/labs/tools/stashbot. See https://www.mediawiki.org/wiki/Developer_access for contributing.","archived":false,"fork":false,"pushed_at":"2024-09-16T23:45:43.000Z","size":215,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-05-14T02:49:02.404Z","etag":null,"topics":["elasticsearch","irc-bot"],"latest_commit_sha":null,"homepage":"https://wikitech.wikimedia.org/wiki/Tool:Stashbot","language":"Python","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wikimedia.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-11-23T10:24:24.000Z","updated_at":"2025-04-04T04:48:30.000Z","dependencies_parsed_at":"2024-09-30T14:40:34.913Z","dependency_job_id":null,"html_url":"https://github.com/wikimedia/labs-tools-stashbot","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/wikimedia/labs-tools-stashbot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wikimedia%2Flabs-tools-stashbot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wikimedia%2Flabs-tools-stashbot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wikimedia%2Flabs-tools-stashbot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wikimedia%2Flabs-tools-stashbot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wikimedia","download_url":"https://codeload.github.com/wikimedia/labs-tools-stashbot/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wikimedia%2Flabs-tools-stashbot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279005966,"owners_count":26084004,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-11T02:00:06.511Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["elasticsearch","irc-bot"],"created_at":"2024-09-30T14:40:29.145Z","updated_at":"2025-10-11T02:38:13.902Z","avatar_url":"https://github.com/wikimedia.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"Stashbot\n========\n\nAn IRC bot designed to store data in an Elasticsearch cluster.\n\nThis bot was created to replace Logstash in an application stack that\nprocesses IRC messages for:\n\n- [quips](https://github.com/bd808/quips)\n- [SAL](https://github.com/bd808/SAL)\n- (an as yet unwritten IRC history search system)\n\nIn addition to its original Elasticsearch storage purpose, the bot has\nexpanded to support:\n- Updating Phabricator tasks mentioned in `!log` irc massages\n- Providing summary information for Phabricator manifest, differential, and\n  pholio objects mentioned in irc messages\n- Writing `!log` messages to a MediaWiki wiki\n- Posting `!log` messages to Mastodon\n\nInstall\n-------\n```\n$ python3 -m venv venv\n$ venv/bin/pip3 install -r requirements.txt\n```\n\nConfigure\n---------\nThe bot is configured using a yaml file. By default `python3 -m stashbot` will\nlook for a configuration file named `config.yaml`. An alternate file can be\nprovided using the `--config` cli argument. See `python3 -m stashbot --help`\nfor more information.\n\nExample configuration:\n```\n---\nirc:\n  server: chat.freenode.net\n  port: 6697\n  nick: mybotnick\n  realname: My Real Name\n  channels:\n    - '##somechan'\n    - '##anotherchan'\n  ignore:\n    - nick1\n    - nick2\n\nelasticsearch:\n  servers:\n    - tools-elastic-01.tools.eqiad.wmflabs\n    - tools-elastic-02.tools.eqiad.wmflabs\n    - tools-elastic-03.tools.eqiad.wmflabs\n  options:\n    port: 80\n    http_auth:\n      - my-es-username\n      - my-es-password\n    sniff_on_start: false\n    sniff_on_connection_fail: false\n  index: 'irc-%Y.%m'\n\nldap:\n  uri: ldap://ldap-labs.eqiad.wikimedia.org:389\n  base: dc=wikimedia,dc=org\n\nphab:\n  url: https://phabricator.wikimedia.org\n  user: MyPhabUser\n  key: api-xxxxxxxxxxxxxxxxxxxxxxx\n  echo: \"%(fullName)s - %(uri)s\"\n  notin:\n    - '##somechan'\n  delay:\n    __default__: 300\n    '##somechan': 600\n\nmediawiki:\n  wikitech:\n    url: https://wikitech.wikimedia.org\n    consumer_token: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n    consumer_secret: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n    access_token: cccccccccccccccccccccccccccccccc\n    access_secret: dddddddddddddddddddddddddddddddddddddddd\n  otherwiki:\n    url: https://wiki.example.com\n    consumer_token: 11111111111111111111111111111111\n    consumer_secret: 2222222222222222222222222222222222222222\n    access_token: 33333333333333333333333333333333\n    access_secret: 4444444444444444444444444444444444444444\n\nmastodon:\n  wikimedia_sal:\n    url: https://fosstodon.org\n    access_token: cccc\n\nbash:\n  view_url: https://tools.wmflabs.org/bash/quip/%s\n\nsal:\n  view_url: https://tools.wmflabs.org/sal/log/%s\n  # For available placeholders, refer to sal.py\n  # and look for Logger._store_in_es() and Logger.log()'s bang object.\n  phab: \"{nav icon=file, name=Mentioned in SAL (%(project)), href=%(href)s} [%(@timestamp)s] \u003c%(nick)s\u003e %(message)s\"\n  channels:\n    '##somechan':\n      project: someproject\n      wiki: wikitech\n      page: Foo/SAL\n      category: SAL\n      acl:\n        default: deny\n        allow:\n            - *!*@*.example.net\n            - *!*@wikimedia/*\n    '##anotherchan':\n      project: anotherproject\n      wiki: otherwiki\n      page: Another project logs\n      leader: ===\n      acl:\n        deny:\n            - *!*jerk@*.domain\n    '##otherchan':\n      use_config: '##somechan'\n      mastodon: wikimedia_sal\n```\n\nOperating the bot\n-----------------\n```\n# Start the bot\n$ ./bin/stashbot.sh start\n\n# Stop the bot\n$ ./bin/stashbot.sh stop\n\n# Tail logs\n$ ./bin/stashbot.sh tail\n```\n\nLicense\n-------\n[GPL-3.0-or-later](https://www.gnu.org/copyleft/gpl.html \"GNU GPLv3+\")\n\nSome code and much inspiration taken from:\n* [Adminbot](https://phabricator.wikimedia.org/diffusion/ODAC/)\n* [Jouncebot](https://phabricator.wikimedia.org/diffusion/GJOU/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwikimedia%2Flabs-tools-stashbot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwikimedia%2Flabs-tools-stashbot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwikimedia%2Flabs-tools-stashbot/lists"}