{"id":34028336,"url":"https://github.com/jykob/teamspeak-bot","last_synced_at":"2026-03-17T22:37:29.377Z","repository":{"id":260834226,"uuid":"882483220","full_name":"jykob/teamspeak-bot","owner":"jykob","description":"Python TeamSpeak Server Query bot using TSBot framework.","archived":false,"fork":false,"pushed_at":"2025-07-10T20:47:17.000Z","size":115,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-15T07:26:41.341Z","etag":null,"topics":["asyncio","bot","python","teamspeak","teamspeak-bot"],"latest_commit_sha":null,"homepage":"","language":"Python","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/jykob.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":"2024-11-02T22:27:30.000Z","updated_at":"2025-07-10T20:46:16.000Z","dependencies_parsed_at":"2024-11-02T22:34:30.147Z","dependency_job_id":"205bd6eb-cbb4-4172-a06d-7b6a8b588a63","html_url":"https://github.com/jykob/teamspeak-bot","commit_stats":null,"previous_names":["jykob/teamspeak-bot"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/jykob/teamspeak-bot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jykob%2Fteamspeak-bot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jykob%2Fteamspeak-bot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jykob%2Fteamspeak-bot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jykob%2Fteamspeak-bot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jykob","download_url":"https://codeload.github.com/jykob/teamspeak-bot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jykob%2Fteamspeak-bot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30633482,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-17T17:32:55.572Z","status":"ssl_error","status_checked_at":"2026-03-17T17:32:38.732Z","response_time":56,"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":["asyncio","bot","python","teamspeak","teamspeak-bot"],"created_at":"2025-12-13T17:05:07.849Z","updated_at":"2026-03-17T22:37:29.370Z","avatar_url":"https://github.com/jykob.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TeamSpeak Bot\n\nTeamSpeak server query bot. This bot is mainly an example project using the [TSBot](https://github.com/jykob/TSBot) framework.\n\n## ✅ Features\n\n### 🔧 Admin\n\nCollection of helpful debugging commands:\n\n- `eval \u003ceval str\u003e`: Evaluates given python expression.\n- `exec \u003cexec str\u003e`: Executes given python expression. Persists any side-effects.\n- `quit`: Closes the bot.\n- `send \u003cquery\u003e`: Sends a raw query to the teamspeak server and return the response data.\n- `spam \u003c#lines\u003e \u003ctext to be spammed\u003e` : Spams the current ctx of the message.\n- `nickname \u003cnickname\u003e`: Changes the bot nickname. If no nickname provided, defaults to the login name.\n\nYou probably don't want anyone running these commands, so they are locked behind checks. You can configure the bot to check for specific _uids_ or server groups that have the permission to run these commands.\n\n### 🚶 AFK Mover\n\nChecks periodically for clients that haven't been active for given amount of time.  \nIf such clients are found, move them to specified _AFK_ channel.\n\nIf the bot doesn't find _AFK_ channel, it will try to create one.\nYou can white/blacklist channels where clients can be moved from.\nIf you have _Jail_ plugin enabled, You might want to add your jail channel to the blacklist.\n\n### 📣 Announce\n\nAnnounce a message to clients by poking them.  \nYou can announce to a specific group or to all clients.\n\n- `announce \"Hello all\"`: Pokes all clients with a message \"Hello all\"\n- `announce \"Team meeting now!\" Staff`: Pokes clients in \"Staff\" server group with \"Team meeting now!\"\n\n### ⛔ Banned names\n\nKicks out any clients with configured nickname.  \nYou can configure a list of banned nicknames or provide a function that return a boolean telling the bot if a given nickname is allowed.\n\nBy default, the bot will only kick the default TeamSpeak nickname: `TeamSpeakUser`\n\n### 🎱 Fun\n\nComes with handful of fun commands:\n\n- `coinflip`: Flips a coin, responding with heads or tails.\n- `roll \u003csize=6\u003e`: Rolls a given sided die.\n\n### 👋 Greeter\n\nGreets new clients (_clients with `guest` server group_) with a configurable message.\n\n### 🛂 Jail\n\nJails a client for a given amount of time.  \nTime can be provided as a _number of seconds_ or `\u003cint\u003eh\u003cint\u003em\u003cint\u003es` meaning number of hours, minutes, and seconds respectively with out the `\u003c\u003e` (_no need to provide all of them_)\n\n- `jail \u003cnickname\u003e \u003ctime\u003e`: Jail misbehaving client.\n- `free \u003cnickname\u003e`: Free jailed client. Don't use in pity.\n\n### 😅 Jokes\n\nCommand to tell some good/bad jokes about programming:\n\n- `joke` Tells a programming related joke\n\n### ⏰ Notify\n\nPokes client with a message after given amount of time.  \nTime parsing works the same as in jail command.\n\n- `notify \u003ctime\u003e \u003cmessage\u003e`: Pokes you after given time with the provided message.\n\n## Requirements\n\n- Python 3.12\n\n## 📦 Installation\n\nYou should always use virtual envs.\n\n```shell\npip install teamspeak-bot\n```\n\n## Configuration\n\nThe bot will look for a configuration module on startup.  \nYou can pass a path to a config file with `-c / --config` command line argument.  \nThe config module must include `CONFIG` variable.\n\n### Example config module:\n\n```python\nfrom teamspeak_bot import BotConfig\n\n# BotConfig is a type safe way for you to configure\n# your bot instance. If you have misconfigured your bot,\n# your IDE will yell at you.\n\nCONFIG = BotConfig(\n    username=\"USERNAME\",\n    password=\"PASSWORD\",\n    address=\"ADDRESS\",\n    plugins={},\n    logging={}\n)\n```\n\n## Running the bot\n\n\u003e **_NOTE:_** You will need provide configuration file.\n\n```shell\nteamspeak-bot\n# -- OR --\npython -m teamspeak_bot\n```\n\n### Command line arguments\n\n- `-c, --config`: Path to a configuration file. Defaults to `config.py`\n- `-l, --logfile`: Path to a log file. Defaults to `log.txt`\n- `-v, --verbose`: Level of verbosity.\n- `-h, --help`: Prints out the help message.\n\n## Plugin configuration:\n\n### Admin\n\nPlugin config key: `admin`\n| Key | Type | Explanation |\n|---|---|---|\n| enabled | `bool` | If the plugin is enabled |\n| allowed_uids | `tuple[str, ...]` | UIDs allowed to run admin commands. |\n| allowed_server_groups | `tuple[str, ...]` | Server groups allowed to run admin commands. |\n| strict_server_group_checking | `bool` | By default if `Admin` in allowed_server_groups, any server group with the word `Admin` is allowed to run admin commands. This flag turns on strict matching. |\n\n### Afk Mover\n\nPlugin config key: `afk_mover`\n| Key | Type | Explanation |\n|---|---|---|\n| enabled | `bool` | If the plugin is enabled |\n| afk_channel | `str` | Name of the AFK channel. doesn't match strictly |\n| idle_time | `float` | AFK grace period in seconds |\n| channel_whitelist | `tuple[str, ...]` | Channel names where clients will be moved. |\n| channel_blacklist | `tuple[str, ...]` | Channel names where clients wont be moved. |\n\n### Announce\n\nPlugin config key: `announce`\n| Key | Type | Explanation |\n|---|---|---|\n| enabled | `bool` | If the plugin is enabled |\n| allowed_uids | `tuple[str, ...]` | UIDs allowed to run announce commands. |\n| allowed_server_groups | `tuple[str, ...]` | Server groups allowed to run announce commands. |\n| strict_server_group_checking | `bool` | Match server groups strictly |\n\n### Banned Names\n\nPlugin config key: `banned_names`  \n`banned_names` and/or `is_banned_name` has to be defined if this plugin is enabled.\n| Key | Type | Explanation |\n|---|---|---|\n| enabled | `bool` | If the plugin is enabled |\n| banned_names | `tuple[str, ...]` | Blacklisted names (case insensitive) |\n| is_banned_name | `Callable[[str], bool]` | Function that determines if a name is banned |\n| message | `str` | Kick message |\n| check_period | `float` | How often bot checks for banned names in the client list in seconds |\n\n### Error events\n\nPlugin config key: `error_events`\n| Key | Type | Explanation |\n|---|---|---|\n| enabled | `bool` | If the plugin is enabled |\n| invalid_invocation_message | `str` | Message when command is invoked wrongly |\n| permission_error_message | `str` | Message when an invoker doesn't have proper permissions to run the command |\n| permission_error_log_message | `str` | Message logged when an invoker doesn't have proper permissions to run the command |\n| command_error_message | `str` | Message when a command handler encounters user error |\n\n### Fun\n\nPlugin config key: `fun`\n| Key | Type | Explanation |\n|---|---|---|\n| enabled | `bool` | If the plugin is enabled |\n\n### Greeter\n\nPlugin config key: `greeter`\n| Key | Type | Explanation |\n|---|---|---|\n| enabled | `bool` | If the plugin is enabled |\n| message | `str` | Message to new user joining the server |\n\n### Jail\n\nPlugin config key: `jail`\n| Key | Type | Explanation |\n|---|---|---|\n| enabled | `bool` | If the plugin is enabled |\n| can_jail_uids | `tuple[str, ...]` | UIDs allowed to jail clients. |\n| can_jail_server_groups | `tuple[str, ...]` | Server groups allowed to jail clients. |\n| strict_server_group_checking | `bool` | Match server groups strictly |\n| jail_channel | `str` | Name of the jail channel. |\n| inmate_server_group_name | `str` | Name of the server group given to jailed clients. |\n\n### Jokes\n\nPlugin config key: `jokes`\n| Key | Type | Explanation |\n|---|---|---|\n| enabled | `bool` | If the plugin is enabled |\n\n### Notify\n\nPlugin config key: `notify`\n| Key | Type | Explanation |\n|---|---|---|\n| enabled | `bool` | If the plugin is enabled |\n| max_delay | `int` | The max notify time in seconds |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjykob%2Fteamspeak-bot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjykob%2Fteamspeak-bot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjykob%2Fteamspeak-bot/lists"}