{"id":20237398,"url":"https://github.com/lostfictions/bort","last_synced_at":"2026-02-04T09:38:39.407Z","repository":{"id":146935214,"uuid":"63461601","full_name":"lostfictions/bort","owner":"lostfictions","description":"it's bort","archived":false,"fork":false,"pushed_at":"2024-12-15T10:00:33.000Z","size":6730,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-12-15T11:17:47.769Z","etag":null,"topics":["bot","botally","discord","discord-bot","typescript"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lostfictions.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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-07-16T02:27:31.000Z","updated_at":"2024-12-15T10:00:39.000Z","dependencies_parsed_at":null,"dependency_job_id":"26733ded-ecde-47f7-bb6c-5d224f183633","html_url":"https://github.com/lostfictions/bort","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lostfictions%2Fbort","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lostfictions%2Fbort/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lostfictions%2Fbort/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lostfictions%2Fbort/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lostfictions","download_url":"https://codeload.github.com/lostfictions/bort/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":233828167,"owners_count":18736581,"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","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":["bot","botally","discord","discord-bot","typescript"],"created_at":"2024-11-14T08:26:49.393Z","updated_at":"2025-09-22T06:31:48.944Z","avatar_url":"https://github.com/lostfictions.png","language":"HTML","readme":"bort is a nice bot.\n\n![bort in cyberverse](https://i.imgur.com/fJwZM2T.gif)\n\ndockerized. will spin up ~~Slack and/or~~ Discord clients if the respective\nenvironment variables are present. possible env vars are:\n\n- `DISCORD_TOKEN`: a Discord API token\n- `USE_CLI`: if 'true', will start up an interface that reads from stdin and\n  prints to stdout instead of connecting to any servers.\n- `BOT_NAME`: the bot name (default: 'bort')\n- `DATA_DIR`: the directory to store persistent data (default: 'persist')\n- `HOSTNAME`: hostname for the bot's server component (defaults to 'localhost'\n  in a dev environment, required in production)\n- `PORT`: port number for the bot's server component (defaults to 8080 in a dev\n  environment, required in production)\n- `OPEN_WEATHER_MAP_KEY`: an api key for the\n  [OpenWeatherMap](https://openweathermap.org/) api, if you'd like bort to be\n  able to tell you the weather.\n\n_(Slack support is removed as of `4.0.0` -- there were some breaking changes in\nthe client API and it didn't seem like bort was running on any Slack teams. if\nthere's interest it can be re-added.)_\n\neach service that bort connects to gets its own isolated data store. stores are\n[leveldb](https://github.com/google/leveldb) databases (via the\n[level](https://github.com/Level/level) package) that are persisted to the\ndirectory provided as the `DATA_DIR`.\n\nthe \"server component\" mentioned above currently serves two purposes:\n\n- it serves static files, like the bot's profile image (which must be hosted for\n  services like Slack and Discord) and generated comics.\n- it's a ping server that you can use in combination with a service like\n  uptimerobot.com to verify if the bot is still running. (...and it's useful in\n  the free tier of certain SaaSes to prevent the bot from going to sleep.)\n\neventually the plan is to have a full web-based management interface (that\noptionally authenticates through Discord account for authorized members of your\nserver) but that's a bit ambitious for a hobby project designed for sharing\nfunny gifs and making bad rhymes.\n\n`npm start` will start the bot in production mode. Use `npm run dev` if you want\nto run a local bot that will connect to services but restart on any change, or\n`npm run dev-cli` to spin up an offline command-line interface for testing that\nwill restart on any change.\n\nbort is written in typescript, and the dockerfile will compile to js as part of\nits setup.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flostfictions%2Fbort","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flostfictions%2Fbort","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flostfictions%2Fbort/lists"}