{"id":24097340,"url":"https://github.com/andydecleyre/mouse-ran-down","last_synced_at":"2025-10-24T01:34:53.843Z","repository":{"id":264921730,"uuid":"894675373","full_name":"AndydeCleyre/mouse-ran-down","owner":"AndydeCleyre","description":"Bring videos from shared X/Reddit/Instagram/TikTok/Bluesky links directly into Telegram chats.","archived":false,"fork":false,"pushed_at":"2025-02-18T22:20:20.000Z","size":73,"stargazers_count":2,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-18T22:31:41.204Z","etag":null,"topics":["bluesky","instagram","reddit","telegram","telegram-bot","tiktok","twitter"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AndydeCleyre.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":"2024-11-26T19:27:20.000Z","updated_at":"2025-02-18T22:20:24.000Z","dependencies_parsed_at":"2024-12-31T20:17:37.216Z","dependency_job_id":"17cdcdac-6d00-4a84-9994-ca3cf404889f","html_url":"https://github.com/AndydeCleyre/mouse-ran-down","commit_stats":null,"previous_names":["andydecleyre/mouse-ran-down"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndydeCleyre%2Fmouse-ran-down","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndydeCleyre%2Fmouse-ran-down/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndydeCleyre%2Fmouse-ran-down/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndydeCleyre%2Fmouse-ran-down/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AndydeCleyre","download_url":"https://codeload.github.com/AndydeCleyre/mouse-ran-down/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241024628,"owners_count":19896273,"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":["bluesky","instagram","reddit","telegram","telegram-bot","tiktok","twitter"],"created_at":"2025-01-10T13:43:53.703Z","updated_at":"2025-10-24T01:34:53.837Z","avatar_url":"https://github.com/AndydeCleyre.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Mouse Ran Down\n\n[![Format and Lint](https://github.com/andydecleyre/mouse-ran-down/actions/workflows/fmt_lint.yml/badge.svg)](https://github.com/andydecleyre/mouse-ran-down/actions/workflows/fmt_lint.yml)\n[![Build and push to ghcr.io](https://github.com/andydecleyre/mouse-ran-down/actions/workflows/ctnr.yml/badge.svg)](https://ghcr.io/andydecleyre/mouse-ran-down)\n[![Update requirements](https://github.com/andydecleyre/mouse-ran-down/actions/workflows/reqs.yml/badge.svg?branch=develop)](https://github.com/andydecleyre/mouse-ran-down/actions/workflows/reqs.yml)\n[![Publish to PyPI](https://github.com/andydecleyre/mouse-ran-down/actions/workflows/pypi.yml/badge.svg)](https://pypi.org/project/mouse_ran_down/)\n\nThis is a Telegram bot.\n\n\u003cimg src=\"https://github.com/user-attachments/assets/9d68a581-f123-4ffb-aa1e-f65b99063eca\" alt=\"playful image of mouse with clock\" width=\"200\"/\u003e\n\nWhen added to a group, any shared public\nX/Reddit/Instagram/TikTok/Bluesky/YouTube/Vimeo/SoundCloud/Bandcamp/Mastodon\nposts with media will be replied to with the media\nuploaded directly into the chat, along with a preview image.\n\nYou can also send links as direct (or forwarded) messages to the bot.\n\nIf you have Telegram Premium or a Business account,\nyou can add the bot to any or all of your one-on-one chats, as well.\nIn that case, it will look to the other party as if you personally sent the media.\n\nNormally, entire accounts, playlists, and albums won't be loaded.\nYou can insist that the bot try to load a link by including\nthe bot's name in the same message (e.g. `@MouseRanDownBot`).\n\nCurrently running at [@MouseRanDownBot](https://t.me/MouseRanDownBot).\n\nI do not guarantee any level of service or privacy, so I encourage you to run it yourself.\n\n## Credentials\n\nCopy `credentials.example.nt` to `credentials.nt` and insert at least a Telegram bot token.\n\nComment out, delete, or use empty values for any unused fields.\n\n### Telegram\n\nUse Telegram's [@BotFather](https://t.me/BotFather) to create a bot and get its token.\n\nEnsure you give it permission to read group messages by disabling privacy mode.\n\n### Cookies\n\nThe optional cookies entry helps if using the bot for reddit video links,\nand age-restricted content and such on other platforms.\nYou can get the cookie content in the right format with `yt-dlp`'s\n`--cookies` and `--cookies-from-browser` options,\nor a browser extension like [cookies.txt](https://addons.mozilla.org/en-US/firefox/addon/cookies-txt/)\n(I can't vouch for the security of this or any extension).\n\n## Installing directly\n\nYou can use `pip`/`pipx`/`uv`/`zpy` etc. to install the package from PyPI, e.g.:\n\n```console\n$ uv tool install mouse-ran-down\n$ uv tool install 'mouse-ran-down[sentry]'  # for Sentry/GlitchTip integration\n```\n\nTo run it effectively you'll need to install `ffmpeg` and `mailcap`,\nand you might benefit from installing `atomicparsley`.\n\nRun `mouse-ran-down --help` for usage.\n\nYou may prefer to just use the container image from my registry (see below).\n\n## Build the container image\n\nMake container image with `./mk/ctnr.sh`:\n\n```console\n$ ./mk/ctnr.sh -h\nBuild a container image for Mouse Ran Down\nUsage: ./mk/ctnr.sh [--connect-repo URL] [\u003cimage\u003e]\n  \u003cimage\u003e defaults to ghcr.io/andydecleyre/mouse-ran-down\n```\n\n## Run the container\n\nIf doing any of these for a rootless container on a Systemd-using server,\ndon't forget to run this once:\n\n```console\n$ loginctl enable-linger\n```\n\nOtherwise podman will kill the container on logout.\n\n### From a local image\n\nRun the container from a local image `ghcr.io/andydecleyre/mouse-ran-down` with:\n\n```console\n$ podman run --rm -d -v ./credentials.nt:/app/credentials.nt:ro ghcr.io/andydecleyre/mouse-ran-down\n```\n\n### From an image pushed to a registry\n\n`./start/podman.sh`:\n\n```console\n$ ./start/podman.sh -h\nUsage: ./start/podman.sh [-n \u003cname\u003e] [-i \u003cimage\u003e] [-t \u003ctag\u003e] [-c] [\u003ccredentials-file\u003e]\n  -n \u003cname\u003e: name of the container (default: mouse)\n  -i \u003cimage\u003e: name of the image (default: ghcr.io/andydecleyre/mouse-ran-down)\n  -t \u003ctag\u003e: tag of the image (default: main)\n  -c: remove any dangling images after starting the container\n  \u003ccredentials-file\u003e: path to credentials.nt (default: ./credentials.nt)\n```\n\n### As an auto-updating Systemd service, pulling from a registry\n\nOr you could write an auto-update-friendly quadlet systemd service at\n`~/.config/containers/systemd/mouse.container`, changing the values as you like:\n\n```ini\n[Container]\nAutoUpdate=registry\nContainerName=mouse\nImage=ghcr.io/andydecleyre/mouse-ran-down:main\nVolume=%h/mouse-ran-down/credentials.nt:/app/credentials.nt:ro\n\n[Service]\nRestart=always\nTimeoutStartSec=120\n\n[Install]\nWantedBy=default.target\n```\n\nEnsure the service is discovered/generated, and start it:\n\n```console\n$ systemctl --user daemon-reload\n$ systemctl --user start mouse\n```\n\nEnsure the auto-updating timer is enabled:\n\n```console\n$ systemctl --user enable --now podman-auto-update.timer\n```\n\n## View container logs\n\n```console\n$ podman logs CONTAINER_NAME  # e.g. mouse\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandydecleyre%2Fmouse-ran-down","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandydecleyre%2Fmouse-ran-down","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandydecleyre%2Fmouse-ran-down/lists"}