{"id":47032522,"url":"https://github.com/mchestr/displex","last_synced_at":"2026-03-12T00:09:44.622Z","repository":{"id":166674551,"uuid":"642179851","full_name":"mchestr/displex","owner":"mchestr","description":"Discord \u0026 Plex \u0026 Tautulli \u0026 Overseerr Bot","archived":false,"fork":false,"pushed_at":"2025-08-11T11:03:13.000Z","size":6455,"stargazers_count":10,"open_issues_count":6,"forks_count":42,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-11T13:05:39.916Z","etag":null,"topics":["discord","discord-bot","discord-linked-role","overseerr","plex","tautulli"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mchestr.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,"zenodo":null}},"created_at":"2023-05-18T02:05:37.000Z","updated_at":"2025-08-11T11:03:02.000Z","dependencies_parsed_at":null,"dependency_job_id":"596c5afe-ed4f-4db8-bce2-ef8ee32f5346","html_url":"https://github.com/mchestr/displex","commit_stats":null,"previous_names":["mchestr/displex"],"tags_count":59,"template":false,"template_full_name":null,"purl":"pkg:github/mchestr/displex","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mchestr%2Fdisplex","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mchestr%2Fdisplex/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mchestr%2Fdisplex/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mchestr%2Fdisplex/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mchestr","download_url":"https://codeload.github.com/mchestr/displex/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mchestr%2Fdisplex/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30408013,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-11T22:36:59.286Z","status":"ssl_error","status_checked_at":"2026-03-11T22:36:57.544Z","response_time":84,"last_error":"SSL_read: 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":["discord","discord-bot","discord-linked-role","overseerr","plex","tautulli"],"created_at":"2026-03-12T00:09:40.676Z","updated_at":"2026-03-12T00:09:44.617Z","avatar_url":"https://github.com/mchestr.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# DisPlex\n\nA Discord, Tautulli, and Overseerr program backed by Rust.\n\n[![Release](https://img.shields.io/github/v/release/mchestr/displex?color=blue\u0026include_prereleases\u0026label=version\u0026style=flat-square)](https://github.com/mchestr/displex/releases)\n[![Licence](https://img.shields.io/github/license/mchestr/displex?style=flat-square\u0026color=blue)](https://opensource.org/licenses/MIT)\n\n\u003cimg src=\"https://raw.githubusercontent.com/mchestr/displex/assets/images/displex.jpg\" width=\"50%\" height=\"50%\" alt=\"logo\"\u003e\n\n\u003c/div\u003e\n\n# Features\n\nDisPlex contains a few components, all packaged within a single Dockerfile. \n\n```\nUsage: displex [OPTIONS] \u003cCOMMAND\u003e\n\nCommands:\n  bot               \n  channel-refresh   \n  clean-tokens      \n  metadata          \n  requests-upgrade  \n  server            \n  user-refresh      \n  help              Print this message or the help of the given subcommand(s)\n```\n\n## Subcommand: bot\n\nRuns a Discord bot which sits in your Discord server and responds to `~ping` commands.\n\n## Subcommand: channel-refresh  \n\nScript which will update your Discord server channels with the realtime stats of current streams.\n\n\u003cimg src=\"https://raw.githubusercontent.com/mchestr/displex/assets/images/stats.png\" width=\"25%\" height=\"25%\" alt=\"logo\"\u003e\n\n## Subcommand: clean-tokens\n\nScript which will clean up any expired Discord tokens.\n\n## Subcommand: metadata\n\nScript to set the Application metadata on Discord. Only needs to be called once.\n\n\u003cimg src=\"https://raw.githubusercontent.com/mchestr/displex/assets/images/meta.png\" width=\"25%\" height=\"25%\" alt=\"logo\"\u003e\n\n## Subcommand: requests-upgrade\n\nScript which will set user request limits in Overseerr based on user watch hours. Tiers can be configured via the Config file.\n\n## Subcommand: server\n\nRuns a webserver which will guide users through the Discord Linked Role OAuth2 flow.\n\n1. Redirect user to sign in on Discord and authorize the Application.\n2. Redirect user to Plex and have user sign in.\n3. Validate Plex user has access to your Plex instance, and grant user Linked Role in Discord.\n\n## Subcommand: user-refresh\n\nScript to set users metadata on Discord and how many hours they have streamed. Uses Tautulli for the data.\n\n# Installation and setup\n\nDocumentation is pretty lacking at the moment. I currently have this deployed as a mixture of deployments \u0026 cronjobs on my kubernetes cluster. The Flux HelmRelease for this can be found in my [home-cluster](https://github.com/mchestr/home-cluster/tree/main/kubernetes/apps/default/displex), it best describes how this is currently being run.\n\n# Development\n\nThis bot is still a work in progress. If you have any ideas for improving or adding to Displex, please open an issue\nor a pull request.\n\n### Testing OAuth Flow Locally\n\nYou can use CloudFlare tunnels or similar to test the OAuth2 flow as it requires valid certs.\n\n```\ncloudflared tunnel --name displex.example.com --hostname displex.example.com --url 'http://localhost:8080' -f\n```\n\nThen visit `https://displex.example.com/auth/discord?next=/auth/plex?next=discord://-/channels/{}/@home`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmchestr%2Fdisplex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmchestr%2Fdisplex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmchestr%2Fdisplex/lists"}