{"id":38179529,"url":"https://github.com/earentir/etbot","last_synced_at":"2026-01-16T23:45:42.805Z","repository":{"id":152947582,"uuid":"453656198","full_name":"earentir/etbot","owner":"earentir","description":"Ear's Twitch Bot","archived":false,"fork":false,"pushed_at":"2025-03-22T20:23:26.000Z","size":388,"stargazers_count":5,"open_issues_count":35,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-22T21:31:07.002Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/earentir.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":"2022-01-30T11:03:32.000Z","updated_at":"2025-03-22T20:23:24.000Z","dependencies_parsed_at":"2023-05-17T12:45:46.112Z","dependency_job_id":null,"html_url":"https://github.com/earentir/etbot","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/earentir/etbot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/earentir%2Fetbot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/earentir%2Fetbot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/earentir%2Fetbot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/earentir%2Fetbot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/earentir","download_url":"https://codeload.github.com/earentir/etbot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/earentir%2Fetbot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28488129,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T22:54:02.790Z","status":"ssl_error","status_checked_at":"2026-01-16T22:50:10.344Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":[],"created_at":"2026-01-16T23:45:42.325Z","updated_at":"2026-01-16T23:45:42.797Z","avatar_url":"https://github.com/earentir.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# etbot aka Ear's Twitch Bot\n\n## Intro\n\nThe bot will provide general bot services for Twitch, twitch integration (read\nonly for now for security reasons, will update with write when more stable),\ndiscord integration (in the future) and OBS integration (in the future) through\na browser service. The plan is to have a single binary running all services and\nmultiplexing from there.\n\n### Permission System\n\nEach registered user has a user type, each user type has a power level and a\ntime multiplier, each command has a minimum power level attached and a timeout.\n\n### System Commands\n\nSystem commands cannot be removed, they can be dissabled though and most have\nthe ability to customize messages (all wii have that in the future)\n\n- bofh\n  - Pulls a BOFH quote from an API\n- commands\n  - Print all commands (including user commands)\n- crypto \\*\n  - Does crypto currency conversions\n- daysoff \\*\n  - Prints the next days off in specified country\n- etbdown\n  - Does a bot reload (not fully yet)\n- exchange \\* \\#\n  - Does FIAT currency conversions\n- fact \\*\n  - Asks for a factual answer from GPT-3\n- fr $\n  - Adds Issues in git hub\n- gpt \\*\n  - Sends the prompt to GPT-3, it cant receive multistep answers (yet)\n- gumroad \\*\n  - Pulls gumroad products\n- joke\n  - You can add/search/delete jokes\n- level\n  - Outputs the users level/type\n- lockdown\n  - Locks down the bot, only the owner can issue commands, its a toggle, running\n    it again will switch it off/on\n- love\n  - Users can add something they love and it will be appended in the !so\n- lurk\n  - Users can lurk, it also allows to type a reason, the user gets unlurked the\n    next time they type something\n- project\n  - Current working project (future sync with stream name/description as an\n    option)\n- quote\n  - Add/Delete/Search Quotes\n- savesettings\n  - Forces a flush of all in memory settings to files\n- so \\*\n  - Will shout out a user, if they have an account all their socials will be\n    printed out including what they love (fully customizable message soon)\n- socials\n  - Prints streamers socials\n- time\n  - Prints the streamers time or the time of any country if you append the tz\n    city\n- tmdb \\*\n  - Pulls data for tv/movie from tmdb\n- updsoc\n  - Allows users to add socials to their accounts\n- user\n  - Add/Delete accounts from the system (will sync twitch type soon)\n- version\n  - Prints the bots version (build date for now)\n- weather \\*\n  - Prints the weather in the streamer city or for any city if appended to the\n    command\n- year\n  - Prints some stats about the current year (day, % of the year left etc)\n- yoke\n  - Prints one of my favorite jokes, its an API call\n- zoe\n  - Pet feeding and petting mechanism, allows users to add treats/petting time\n    to a que\n\n\\* Commands with \\* require an API key from a third party. Commands with a $\nrequire a local client.\n\n\\# Command dooes not work since the API is down\n\n### User Commands\n\nUser commands are of 4 types punchline, varpunchline, counter and tree(not\nimplemented yet), the default are there just as an example(and I use them in my\nchannel)\n\n- ban\n- f\n- hi\n- hype\n- mic\n- nvidia\n- oil\n- putin\n- sudo\n- unban\n- yogurt\n\n#### punchline\n\nIn this example the command !oil will output a random line from the messages. It\nwill also cativate for all the aliases !olive, !olives, !oliveoil and it can be\nused by any user in the default config (userlevel 10).\n\n```\n{\n\t\t\"name\": \"oil\",\n\t\t\"type\": \"punchline\",\n\t\t\"messages\": [\n\t\t\t\"Olive Oil is BESTEST Oil\",\n\t\t\t\"If your oil is NOT olive oil, then its for your car\",\n\t\t\t\"Olive Oil FTW\",\n\t\t\t\"Olive Oil For Life\",\n\t\t\t\"Did you know Olive oil is good for you health compared to every other oil?\"\n\t\t],\n\t\t\"alias\": [\n\t\t\t\"olive\",\n\t\t\t\"olives\",\n\t\t\t\"oliveoil\"\n\t\t],\n\t\t\"options\": {\n\t\t\t\"lastuse\": 1646330233,\n\t\t\t\"counter\": 18,\n\t\t\t\"userlevel\": 10,\n\t\t\t\"cooldown\": 1000,\n\t\t\t\"enabled\": true\n\t\t}\n\t},\n```\n\n#### varpunchline\n\nA varpunchline is the same as a punchline but it accepts variables, ^a for\nattributed user (@earentir for example) and ^u for the activating users username\n\n```\n{\n\t\t\"name\": \"hype\",\n\t\t\"type\": \"varpunchline\",\n\t\t\"messages\": [\n\t\t\t\"earentFfs ^a, dont you think there is better places to spend your money ? Stop wasting it !!!\",\n\t\t\t\"Go rent a movie instead earentFfs, ^a dont waste money!!!\"\n\t\t],\n\t\t\"alias\": [\n\t\t\t\"\"\n\t\t],\n\t\t\"options\": {\n\t\t\t\"lastuse\": 1647043141,\n\t\t\t\"counter\": 13,\n\t\t\t\"userlevel\": 10,\n\t\t\t\"cooldown\": 2000,\n\t\t\t\"enabled\": true\n\t\t}\n\t},\n```\n\n#### counter\n\nA classic counter command, when its activated it just increases the countr (all\ncommands have a counter, in this case the count is getting reported)\n\n````\n\t{\n\t\t\"name\": \"f\",\n\t\t\"type\": \"counter\",\n\t\t\"messages\": [\n\t\t\t\"!%s has been used %v times.\"\n\t\t],\n\t\t\"alias\": [\n\t\t\t\"\"\n\t\t],\n\t\t\"options\": {\n\t\t\t\"lastuse\": 1646507586,\n\t\t\t\"counter\": 2,\n\t\t\t\"userlevel\": 10,\n\t\t\t\"cooldown\": 3000,\n\t\t\t\"enabled\": true\n\t\t}\n\t},```\n````\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fearentir%2Fetbot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fearentir%2Fetbot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fearentir%2Fetbot/lists"}