From 83ab0480ea65bb44afa37b8be02973a4f4896827 Mon Sep 17 00:00:00 2001 From: Sijis Aviles Date: Sun, 12 Oct 2025 23:44:02 -0600 Subject: [PATCH 1/5] chore: update repos.json and excluded repos list --- docs/html_extras/repos.json | 251 +++++++++++++++++++++++++++++++++++- tools/blacklisted.txt | 42 ++++++ 2 files changed, 292 insertions(+), 1 deletion(-) diff --git a/docs/html_extras/repos.json b/docs/html_extras/repos.json index baf18e9fc..6f299f3b1 100755 --- a/docs/html_extras/repos.json +++ b/docs/html_extras/repos.json @@ -429,5 +429,254 @@ "avatar_url": "https://avatars.githubusercontent.com/u/11041007?v=4", "score": -104.04 } + }, + "errbotio/err-backend-mattermost": { + "Mattermost": { + "path": "src/err-backend-mattermost/err-backend-mattermost.plug", + "repo": "https://github.com/errbotio/err-backend-mattermost", + "documentation": "Mattermost backend for Errbot.", + "name": "Mattermost", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/15802630?v=4", + "score": 139.28 + }, + "TestPlugin": { + "path": "tests/plugins/test.plug", + "repo": "https://github.com/errbotio/err-backend-mattermost", + "documentation": "A Test plugin", + "name": "TestPlugin", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/15802630?v=4", + "score": 139.28 + } + }, + "errbotio/err-backend-slackv3": { + "SlackV3": { + "path": "src/slackv3/slackv3.plug", + "repo": "https://github.com/errbotio/err-backend-slackv3", + "documentation": "Backend for Slack's Real Time Messaging and Events APIs.", + "name": "SlackV3", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/15802630?v=4", + "score": 111.68 + } + }, + "marksull/err-backend-cisco-webex-teams": { + "CiscoWebexTeams": { + "path": "CiscoWebexTeams.plug", + "repo": "https://github.com/marksull/err-backend-cisco-webex-teams", + "documentation": "This is a backend implementation for Cisco Webex Teams", + "name": "CiscoWebexTeams", + "python": "3.6.0", + "avatar_url": "https://avatars.githubusercontent.com/u/1705633?v=4", + "score": 80.76 + }, + "ExampleFlow": { + "path": "plugins/err-example-flow/exampleflow.plug", + "repo": "https://github.com/marksull/err-backend-cisco-webex-teams", + "documentation": "This is example of how to use Errbot flow control", + "name": "ExampleFlow", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/1705633?v=4", + "score": 80.76 + }, + "ExampleLarge": { + "path": "plugins/err-example-large/examplelarge.plug", + "repo": "https://github.com/marksull/err-backend-cisco-webex-teams", + "documentation": "This is a simple plugin example that demonstrates how to work with large blocks of text", + "name": "ExampleLarge", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/1705633?v=4", + "score": 80.76 + }, + "ExampleWithCards": { + "path": "plugins/err-example-cards/examplecards.plug", + "repo": "https://github.com/marksull/err-backend-cisco-webex-teams", + "documentation": "This is a simple plugin example with cards to get you started.", + "name": "ExampleWithCards", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/1705633?v=4", + "score": 80.76 + }, + "ExampleUpload": { + "path": "plugins/err-example-upload/exampleupload.plug", + "repo": "https://github.com/marksull/err-backend-cisco-webex-teams", + "documentation": "This is a simple plugin example with upload to get you started.", + "name": "ExampleUpload", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/1705633?v=4", + "score": 80.76 + }, + "ExampleSimple": { + "path": "plugins/err-example-simple/examplesimple.plug", + "repo": "https://github.com/marksull/err-backend-cisco-webex-teams", + "documentation": "This is a simple plugin example", + "name": "ExampleSimple", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/1705633?v=4", + "score": 80.76 + }, + "ExampleRemember": { + "path": "plugins/err-example-remember/exampleremember.plug", + "repo": "https://github.com/marksull/err-backend-cisco-webex-teams", + "documentation": "This is a plugin example on how to remember data between calls.", + "name": "ExampleRemember", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/1705633?v=4", + "score": 80.76 + }, + "ExampleNotFound": { + "path": "plugins/err-example-not-found/examplenotfound.plug", + "repo": "https://github.com/marksull/err-backend-cisco-webex-teams", + "documentation": "This is a plugin that adds a custom not found error message to the bot.", + "name": "ExampleNotFound", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/1705633?v=4", + "score": 80.76 + }, + "ExampleTemplate": { + "path": "plugins/err-example-templates/exampletemplate.plug", + "repo": "https://github.com/marksull/err-backend-cisco-webex-teams", + "documentation": "This is a plugin that leverages Errbot templates", + "name": "ExampleTemplate", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/1705633?v=4", + "score": 80.76 + }, + "ExampleSendCallback": { + "path": "plugins/err-example-send-callback/examplesendcallback.plug", + "repo": "https://github.com/marksull/err-backend-cisco-webex-teams", + "documentation": "This is a simple plugin example to show how to create a send callback handler", + "name": "ExampleSendCallback", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/1705633?v=4", + "score": 80.76 + } + }, + "vasilcovsky/errbot-backend-botframework": { + "BotFramework": { + "path": "botframework.plug", + "repo": "https://github.com/vasilcovsky/errbot-backend-botframework", + "documentation": "Backend implementation for Bot Framework (https://www.botframework.com)", + "name": "BotFramework", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/977901?v=4", + "score": 44.120000000000005 + } + }, + "cloudflare/GHC-Errbot": { + "Google-Hangouts-Chat": { + "path": "hangouts-chat.plug", + "repo": "https://github.com/cloudflare/GHC-Errbot", + "documentation": "A Google-Hangouts-Chat backend for Err", + "name": "Google-Hangouts-Chat", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/314135?v=4", + "score": 73.96 + } + }, + "attakei/errcron": { + "Errcron": { + "path": "samples/errcron_demo.plug", + "repo": "https://github.com/attakei/errcron", + "documentation": "Crontab implementation for Errbot(It is a demo plugin)", + "name": "Errcron", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/668834?v=4", + "score": 56.68 + } + }, + "ESSS/err-jenkins": { + "Jenkins": { + "path": "esss_jenkins.plug", + "repo": "https://github.com/ESSS/err-jenkins", + "documentation": "ESSS Jenkins workflow helper", + "name": "Jenkins", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/1074769?v=4", + "score": 10.439999999999998 + } + }, + "attakei/err-storage-yaml": { + "YAML": { + "path": "yaml.plug", + "repo": "https://github.com/attakei/err-storage-yaml", + "documentation": "YAML save/load storage for Errbot", + "name": "YAML", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/668834?v=4", + "score": -26.880000000000003 + } + }, + "Team488/meeting-bot": { + "XMeeting": { + "path": "are_we_meeting.plug", + "repo": "https://github.com/Team488/meeting-bot", + "documentation": "A meeting helper bot", + "name": "XMeeting", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/3441816?v=4", + "score": -117.76 + } + }, + "TheArchives/Inter": { + "Chat": { + "path": "plugins/chat.plug", + "repo": "https://github.com/TheArchives/Inter", + "documentation": "A plugin for relaying chat between servers", + "name": "Chat", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/1098410?v=4", + "score": -148.96 + }, + "Authentication": { + "path": "plugins/auth.plug", + "repo": "https://github.com/TheArchives/Inter", + "documentation": "A plugin for simple API-key based authentication", + "name": "Authentication", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/1098410?v=4", + "score": -148.96 + }, + "Players": { + "path": "plugins/players.plug", + "repo": "https://github.com/TheArchives/Inter", + "documentation": "A plugin that tracks online players on all connected servers.", + "name": "Players", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/1098410?v=4", + "score": -148.96 + } + }, + "theho/thehobot": { + "example": { + "path": "example/example.plug", + "repo": "https://github.com/theho/thehobot", + "documentation": "Just an example", + "name": "example", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/1423278?v=4", + "score": -136.64 + } + }, + "shuiiiiiimu/hatter": { + "Hello": { + "path": "plugins/hello/hello.plug", + "repo": "https://github.com/shuiiiiiimu/hatter", + "documentation": "This is a simple plugin example to get you started.", + "name": "Hello", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/6757399?v=4", + "score": -130.92 + }, + "Example": { + "path": "plugins/err-example/example.plug", + "repo": "https://github.com/shuiiiiiimu/hatter", + "documentation": "This is a simple plugin example to get you started.", + "name": "Example", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/6757399?v=4", + "score": -130.92 + } } -} +} \ No newline at end of file diff --git a/tools/blacklisted.txt b/tools/blacklisted.txt index 7544875d7..bb157f9e1 100644 --- a/tools/blacklisted.txt +++ b/tools/blacklisted.txt @@ -1248,3 +1248,45 @@ zopefoundation/zope.app.error zopefoundation/zope.error zopefoundation/zope.errorview zxdswgnda/getErrImgPair +TW-NLP/ChineseErrorCorrector +microsoft/simulated-trial-and-error +sprytnyk/pylint-errors +NJU-PCALab/ERR +rodrigogiraoserrao/error-links +voxel51/reconstruction-error-ratios +Aolin-MIR/soft-masked-bert-for-spelling-error-correction +danmcb/auto-error-codes +sirius8050/Expected-Calibration-Error +comeonzhj/Errata_byAI_word +samueljsb/silence-lint-error +iamsudip/err-pagerduty +TIMER-err/fuckewt360 +polcats/ErrandClassifier +robempire/ErrorBot +hellosaumil/MyErrVisualizer +Hamed233/ErrorTrace-Pro +Coldmist-Lu/ErrorAnalysis_NLGEvaluation +PowerSystem2024/Error404TercerSemestre +jyothish-ram/StackOverflow_error_auto_search +ayushgargdroid/Error-Level-Analysis-for-Jpeg +HQSquantumsimulations/non-iid-error-correction-published +chandu7077/error-detection-in-computer-networks +rohithreddy0087/error-control-codes-wireless-channels +sudo-LuSer/Pi-10--15-ERROR-APPROXIMA +S-kewen/lidar-point-cloud-error-concealment +mschubert95/identifying_label_errors_in_od +Iankulani/Error-Based-SQL-Injection-Detector +oudmadadi/error-handling +larsbratholm/boltzmann_errors +Peder2911/pac_errors +GoeSoft/Error-Validate +MudrakshnMcShaw/Executor_Error +cwhit-io/error-notifier +Kiln707/Flask_Error +Viacheslav1skywalker/Errors_Killer +nextixt/Error_func +thebmo/bmodjangotest +tomblench/ofhave +vitorio/snarky-screening +xi/lunchbot +ZaneRL9/IpreoChatOps From 49a4be1c9ac50119d9f46f5b533faecb2056fe06 Mon Sep 17 00:00:00 2001 From: Sijis Aviles Date: Tue, 19 May 2026 21:03:53 -0400 Subject: [PATCH 2/5] docs: add info to CHANGES --- CHANGES.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index 33ddb9f98..bc48f4ff7 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -87,7 +87,7 @@ fixes: - docs: fix example code in the testing section (#1643) - chore: update all core dependencies (#1651) - fix: use template file for webserver plugin echo output (#1654) -- chore: update repos.json (#1660) +- chore: update repos.json (#1660, #1741) - docs: add readthedocs yaml config (#1661) - fix: broken integration tests (#1668) - style: replace format() with f-strings (#1667) From 3b07185c318f922b33ece1064c85021d5ea74b14 Mon Sep 17 00:00:00 2001 From: Sijis Aviles Date: Tue, 19 May 2026 23:54:47 -0400 Subject: [PATCH 3/5] refactor: faster and simplier plugin discovery Refactored with global code search for faster plugin discovery and improved rate limit handling. Added persistent state management to support resuming interrupted runs and optimized the scoring formula with activity-based weighting. --- tools/plugin-gen.py | 531 ++++++++++++++++++++++++++------------------ 1 file changed, 309 insertions(+), 222 deletions(-) diff --git a/tools/plugin-gen.py b/tools/plugin-gen.py index 2f8e3de0f..f739db8cc 100755 --- a/tools/plugin-gen.py +++ b/tools/plugin-gen.py @@ -4,177 +4,229 @@ import logging import os import pathlib +import signal import sys import time from datetime import datetime +from typing import Any, Dict, List, Optional, Set import requests from requests.auth import HTTPBasicAuth -logging.basicConfig() - +# Configure logging +logging.basicConfig( + level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s" +) log = logging.getLogger(__name__) -log.setLevel(logging.DEBUG) DEFAULT_AVATAR = "https://upload.wikimedia.org/wikipedia/commons/5/5f/Err-logo.png" -BLACKLISTED = [] - -user_cache = {} -plugins = {} -def get_auth(): - """Get auth creds from Github Token - - token is generated from the personal tokens in github +class CatalogGenerator: + """ + Generates a plugin catalog by searching GitHub for Errbot plugins. + Uses Global Code Search and batched processing where supported. """ - token_file = pathlib.Path("token") - token_env = os.getenv("ERRBOT_REPOS_TOKEN") - if token_file.is_file(): - try: - token_info = open("token", "r").read() - except ValueError: + def __init__(self, tools_dir: pathlib.Path): + self.tools_dir = tools_dir + self.repos_json_path = tools_dir / "repos.json" + self.processed_path = tools_dir / "processed_repos.json" + self.blacklisted_path = tools_dir / "blacklisted.txt" + self.extras_path = tools_dir / "extras.txt" + self.token_path = tools_dir / "token" + + self.auth = self._get_auth() + self.session = requests.Session() + self.session.auth = self.auth + + # State management + self.plugins = self._load_json(self.repos_json_path, {}) + self.processed_repos = set(self._load_json(self.processed_path, [])) + self.blacklisted = self._load_blacklisted() + + # Cache for repo metadata to avoid redundant requests + self.repo_metadata_cache = {} + + log.info(f"Loaded {len(self.plugins)} repositories from {self.repos_json_path}") + log.info(f"Loaded {len(self.blacklisted)} blacklisted repositories") + + self.interrupted = False + signal.signal(signal.SIGINT, self._handle_interrupt) + signal.signal(signal.SIGTERM, self._handle_interrupt) + + def _handle_interrupt(self, signum, frame): + log.warning("Interrupt received, saving state and exiting...") + self.interrupted = True + + def _get_auth(self) -> HTTPBasicAuth: + """Retrieve GitHub authentication credentials.""" + token_env = os.getenv("ERRBOT_REPOS_TOKEN") + token_info = None + + if self.token_path.is_file(): + try: + token_info = self.token_path.read_text().strip() + except Exception as e: + log.fatal(f"Token file cannot be read: {e}") + sys.exit(-1) + elif token_env: + token_info = token_env + else: log.fatal( - "Token file cannot be properly read, should be of the form username:token" + "No 'token' file or environment variable 'ERRBOT_REPOS_TOKEN' found." ) sys.exit(-1) - elif token_env: - token_info = token_env - else: - msg = "No 'token' file or environment variable 'ERROBOT_REPOS_TOKEN' found." - log.fatal(msg) - sys.exit(-1) - try: - user, token = token_info.strip().split(":") - except ValueError: - msg = "Token file cannot be properly read, should be of the form username:token" - log.fatal(msg) - sys.exit(-1) - - auth = HTTPBasicAuth(user, token) - return auth - - -AUTH = get_auth() + try: + user, token = token_info.split(":", 1) + return HTTPBasicAuth(user, token) + except ValueError: + log.fatal("Token should be of the form username:token") + sys.exit(-1) + def _load_json(self, path: pathlib.Path, default: Any) -> Any: + """Load data from a JSON file.""" + if path.exists(): + try: + with open(path, "r") as f: + return json.load(f) + except Exception as e: + log.error(f"Failed to load {path}: {e}") + return default + + def _load_blacklisted(self) -> Set[str]: + """Load blacklisted repositories from file.""" + if self.blacklisted_path.exists(): + with open(self.blacklisted_path, "r") as f: + return {line.strip() for line in f if line.strip()} + return set() + + def _save_state(self): + """Persist the current state to disk.""" + log.info("Saving state...") + try: + # Sort plugins by repo name for consistency in file + sorted_plugins = dict(sorted(self.plugins.items())) + with open(self.repos_json_path, "w") as f: + json.dump(sorted_plugins, f, indent=2, separators=(",", ": ")) + with open(self.processed_path, "w") as f: + json.dump(sorted(list(self.processed_repos)), f, indent=2) + except Exception as e: + log.error(f"Failed to save state: {e}") + + def add_blacklisted(self, repo_name: str): + """Add a repository to the blacklist and persist it.""" + if repo_name not in self.blacklisted: + self.blacklisted.add(repo_name) + try: + with open(self.blacklisted_path, "a") as f: + f.write(repo_name + "\n") + except Exception as e: + log.error(f"Failed to update blacklist file: {e}") + + def rate_limit(self, resp: requests.Response): + """Wait if GitHub API rate limit is reached.""" + if resp.status_code == 403 and "rate limit exceeded" in resp.text.lower(): + log.warning("Rate limit hit. Waiting 60s...") + time.sleep(60) + return + + if "X-RateLimit-Remaining" not in resp.headers: + return + + remain = int(resp.headers["X-RateLimit-Remaining"]) + limit = int(resp.headers["X-RateLimit-Limit"]) + + if remain > 1: + return + + reset = int(resp.headers["X-RateLimit-Reset"]) + ts = datetime.fromtimestamp(reset) + delay = (ts - datetime.now()).total_seconds() + + log.warning(f"Hit rate limit ({remain}/{limit}). Waiting {delay:.1f} seconds...") + if delay < 0: + delay = 2 + time.sleep(delay) + + def get_repo_metadata(self, repo_name: str) -> Optional[Dict[str, Any]]: + """Fetch repository metadata using Core API.""" + if repo_name in self.repo_metadata_cache: + return self.repo_metadata_cache[repo_name] + + log.debug(f"Fetching metadata for {repo_name}...") + resp = self.session.get(f"https://api.github.com/repos/{repo_name}") + self.rate_limit(resp) + + if resp.status_code == 200: + metadata = resp.json() + self.repo_metadata_cache[repo_name] = metadata + return metadata + elif resp.status_code == 404: + log.error(f"Repo {repo_name} not found") + return None + else: + log.error(f"Error fetching metadata for {repo_name}: {resp.status_code}") + return None + + def _calculate_score(self, repo: Dict[str, Any]) -> float: + """Calculate a popularity/activity score for a repository.""" + updated_at_str = repo.get("updated_at", "2000-01-01T00:00:00Z") + updated_at = datetime.strptime(updated_at_str, "%Y-%m-%dT%H:%M:%SZ") + days_old = (datetime.now() - updated_at).days + + # Formula: Stars + (Watchers * 2) + Forks - (Days Old / 30) + score = ( + repo.get("stargazers_count", 0) + + repo.get("watchers_count", 0) * 2 + + repo.get("forks_count", 0) + - (days_old / 30.0) + ) + return float(f"{score:.2f}") -def add_blacklisted(repo): - with open("blacklisted.txt", "a") as f: - f.write(repo) - f.write("\n") + def process_plug_file(self, item: Dict[str, Any], progress_info: str = ""): + """Process a single .plug file found in search.""" + repo_name = item["repository"]["full_name"] + if repo_name in self.blacklisted: + return -def save_plugins(): - with open("repos.json", "w") as f: - json.dump(plugins, f, indent=2, separators=(",", ": ")) + log.info(f"{progress_info} Processing {item['path']} in {repo_name}") + default_branch = item["repository"].get("default_branch") + if not default_branch: + # If not in search item, we need to fetch it once per repo + repo_meta = self.get_repo_metadata(repo_name) + default_branch = repo_meta.get("default_branch", "master") if repo_meta else "master" -def get_avatar_url(repo): - username = repo.split("/")[0] - if username in user_cache: - user = user_cache[username] - else: - user_res = requests.get("https://api.github.com/users/" + username, auth=AUTH) - user = user_res.json() - if "avatar_url" in user: # don't pollute the presistent cache - user_cache[username] = user - with open("user_cache", "w") as f: - f.write(repr(user_cache)) - rate_limit(user_res) - return user["avatar_url"] if "avatar_url" in user else DEFAULT_AVATAR + raw_url = f"https://raw.githubusercontent.com/{repo_name}/{default_branch}/{item['path']}" + plugfile_resp = self.session.get(raw_url) + if plugfile_resp.status_code != 200: + log.error(f"Failed to fetch {raw_url}") + return -def rate_limit(resp): - """ - Wait enough to be in the budget for this request. - :param resp: the http response from github - :return: - """ - if "X-RateLimit-Remaining" not in resp.headers: - log.info("No rate limit detected. Hum along...") - return - remain = int(resp.headers["X-RateLimit-Remaining"]) - limit = int(resp.headers["X-RateLimit-Limit"]) - log.info("Rate limiter: %s allowed out of %d", remain, limit) - if remain > 1: # margin by one request - return - reset = int(resp.headers["X-RateLimit-Reset"]) - ts = datetime.fromtimestamp(reset) - delay = (ts - datetime.now()).total_seconds() - log.info("Hit rate limit. Have to wait for %d seconds", delay) - if delay < 0: # time drift - delay = 2 - time.sleep(delay) - - -def parse_date(gh_date: str) -> datetime: - return datetime.strptime(gh_date, "%Y-%m-%dT%H:%M:%SZ") - - -def check_repo(repo): - repo_name = repo.get("full_name", None) - if repo_name is None: - log.error("No name in %s", repo) - log.debug("Checking %s...", repo_name) - code_resp = requests.get( - "https://api.github.com/search/code?q=extension:plug+repo:%s" % repo_name, - auth=AUTH, - ) - if code_resp.status_code != 200: - log.error( - "Error getting https://api.github.com/search/code?q=extension:plug+repo:%s", - repo_name, - ) - log.error("code %d", code_resp.status_code) - log.error("content %s", code_resp.text) - - return - plug_items = code_resp.json()["items"] - if not plug_items: - log.debug("No plugin found in %s, blacklisting it.", repo_name) - add_blacklisted(repo_name) - return - owner = repo["owner"] - avatar_url = owner["avatar_url"] if "avatar_url" in owner else DEFAULT_AVATAR - - days_old = (datetime.now() - parse_date(repo["updated_at"])).days - score = ( - repo["stargazers_count"] - + repo["watchers_count"] * 2 - + repo["forks_count"] - - days_old / 25 - ) - - for plug in plug_items: - plugfile_resp = requests.get( - "https://raw.githubusercontent.com/%s/master/%s" % (repo_name, plug["path"]) - ) - log.debug("Found a plugin:") - log.debug("Repo: %s", repo_name) - log.debug("File: %s", plug["path"]) parser = configparser.ConfigParser() try: parser.read_string(plugfile_resp.text) + if "Core" not in parser or "Name" not in parser["Core"]: + return name = parser["Core"]["Name"] - log.debug("Name: %s", name) + doc = parser.get("Documentation", "Description", fallback="") + python = parser.get("Python", "Version", fallback="2") - if "Documentation" in parser and "Description" in parser["Documentation"]: - doc = parser["Documentation"]["Description"] - log.debug("Documentation: %s", doc) - else: - doc = "" + # Get repo metadata for scoring + repo = self.get_repo_metadata(repo_name) + if not repo: + return - if "Python" in parser: - python = parser["Python"]["Version"] - log.debug("Python Version: %s", python) - else: - python = "2" + avatar_url = repo.get("owner", {}).get("avatar_url", DEFAULT_AVATAR) + score = self._calculate_score(repo) plugin = { - "path": plug["path"], + "path": item["path"], "repo": repo["html_url"], "documentation": doc, "name": name, @@ -183,94 +235,129 @@ def check_repo(repo): "score": score, } - repo_entry = plugins.get(repo_name, {}) + repo_entry = self.plugins.get(repo_name, {}) repo_entry[name] = plugin - plugins[repo_name] = repo_entry - log.debug("Catalog added plugin %s.", plugin["name"]) - except Exception: - log.error("Invalid syntax in %s, skipping...", plug["path"]) - continue - - rate_limit(plugfile_resp) - - save_plugins() - rate_limit(code_resp) - - -def find_plugins(query): - url = ( - "https://api.github.com/search/repositories?q=%s+in:name+language:python&sort=stars&order=desc" - % query - ) - while True: - repo_resp = requests.get(url, auth=AUTH) - repo_json = repo_resp.json() - if repo_json.get("message", None) == "Bad credentials": - log.error("Invalid credentials, check your token file, see README.") - sys.exit(-1) - log.debug( - "Repo reqs before ratelimit %s/%s", - repo_resp.headers["X-RateLimit-Remaining"], - repo_resp.headers["X-RateLimit-Limit"], - ) - if "message" in repo_json and repo_json["message"].startswith( - "API rate limit exceeded for" - ): - log.error("API rate limit hit anyway ... wait for 30s") - time.sleep(30) - continue - items = repo_json["items"] - - for repo in items: - if repo["full_name"] in BLACKLISTED: - log.debug("Skipping %s.", repo) - continue - check_repo(repo) - if "next" not in repo_resp.links: - break - url = repo_resp.links["next"]["url"] - log.debug("Next url: %s", url) - rate_limit(repo_resp) - - -def main(): - find_plugins("err") - # Those are found by global search only available on github UI: - # https://github.com/search?l=&q=Documentation+extension%3Aplug&ref=advsearch&type=Code&utf8=%E2%9C%93 - url = "https://api.github.com/repos/%s" - with open("extras.txt", "r") as extras: - for repo_name in extras: - repo_name = repo_name.strip() - repo_resp = requests.get(url % repo_name, auth=AUTH) - repo = repo_resp.json() - if repo.get("message", None) == "Bad credentials": - log.error("Invalid credentials, check your token file, see README.") - sys.exit(-1) - if "message" in repo and repo["message"].startswith( - "API rate limit exceeded for" - ): - log.error("API rate limit hit anyway ... wait for 30s") - time.sleep(30) - continue - if "message" in repo and repo["message"].startswith("Not Found"): - log.error("%s not found.", repo_name) + self.plugins[repo_name] = repo_entry + log.debug(f"Cataloged plugin '{name}' from {repo_name}") + + # Mark repo as processed so Phase 2 skips it + self.processed_repos.add(repo_name) + + except Exception as e: + log.error(f"Invalid plug file {item['path']} in {repo_name}: {e}") + + def global_search(self): + """Find all .plug files globally that mention 'err' or 'errbot'.""" + search_url = "https://api.github.com/search/code" + # Let requests handle the encoding of spaces and special chars + params = {"q": "extension:plug err OR errbot"} + + processed_count = 0 + total_count = -1 + + while search_url and not self.interrupted: + resp = self.session.get(search_url, params=params) + self.rate_limit(resp) + + if resp.status_code != 200: + log.error(f"Phase 1 Search failed: {resp.status_code}") + log.error(f"Response: {resp.text}") + break + + data = resp.json() + if total_count == -1: + total_count = data.get("total_count", 0) + log.info(f"Phase 1: Global search found {total_count} potential plugins.") + + items = data.get("items", []) + for item in items: + if self.interrupted: + break + processed_count += 1 + progress = f"[Phase 1/2] [File {processed_count}/{total_count}]" + self.process_plug_file(item, progress) + + if self.interrupted: + break + + # Save state after each page + self._save_state() + + search_url = resp.links.get("next", {}).get("url") + # Clear params for next pages as they are already in the 'next' URL + params = None + if search_url: + time.sleep(2) + + def process_extras(self): + """Ensure specific repositories from extras.txt are included.""" + if not self.extras_path.exists(): + return + + with open(self.extras_path, "r") as f: + all_extras = [line.strip() for line in f if line.strip()] + + pending_extras = [r for r in all_extras if r not in self.processed_repos] + total_extras = len(all_extras) + log.info(f"Phase 2: Processing {len(pending_extras)} pending repositories from extras.txt.") + + processed_so_far = total_extras - len(pending_extras) + + for repo_name in pending_extras: + if self.interrupted: + break + + processed_so_far += 1 + progress = f"[Phase 2/2] [Repo {processed_so_far}/{total_extras}]" + + log.info(f"{progress} Searching for plugins in {repo_name}...") + + search_url = "https://api.github.com/search/code" + params = {"q": f"extension:plug repo:{repo_name}"} + resp = self.session.get(search_url, params=params) + self.rate_limit(resp) + + if resp.status_code == 200: + data = resp.json() + items = data.get("items", []) + for item in items: + self.process_plug_file(item, progress) + + self.processed_repos.add(repo_name) + # Save state frequently to ensure progress isn't lost + if processed_so_far % 5 == 0: + self._save_state() + elif resp.status_code == 422: + # Often means repo is empty or issues searching it + log.warning(f"{progress} Repo {repo_name} search returned 422, skipping.") + log.debug(f"Response: {resp.text}") + self.processed_repos.add(repo_name) else: - check_repo(repo) - rate_limit(repo_resp) + log.error(f"{progress} Search failed for {repo_name}: {resp.status_code}") + log.debug(f"Response: {resp.text}") + + # Mandatory 2s sleep to avoid hitting the 30 searches/minute limit + time.sleep(2) + + def run(self): + """Start the generation process.""" + log.info("Starting optimized plugin catalog generation...") + + # 1. Global search for .plug files + self.global_search() + + # 2. Process extras + if not self.interrupted: + self.process_extras() + + self._save_state() + if self.interrupted: + log.info("Interrupted. State saved.") + else: + log.info("Finished successfully!") if __name__ == "__main__": - try: - with open("user_cache", "r") as f: - user_cache = eval(f.read()) - except FileNotFoundError: - # File doesn't exist, so we continue on - log.info("No user cache existing, will be generating it for the first time.") - - try: - with open("blacklisted.txt", "r") as f: - BLACKLISTED = [line.strip() for line in f.readlines()] - except FileNotFoundError: - log.info("No blacklisted.txt found, no plugins will be blacklisted.") - - main() + tools_dir = pathlib.Path(__file__).parent.resolve() + generator = CatalogGenerator(tools_dir) + generator.run() From 435f7ea66ede8e29a46fe0702fd7e93349b1c0d5 Mon Sep 17 00:00:00 2001 From: Sijis Aviles Date: Wed, 20 May 2026 00:03:30 -0400 Subject: [PATCH 4/5] chore: update repos.json --- docs/html_extras/repos.json | 3079 ++++++++++++++++++++++++++++++----- 1 file changed, 2683 insertions(+), 396 deletions(-) diff --git a/docs/html_extras/repos.json b/docs/html_extras/repos.json index 6f299f3b1..96ca7010f 100755 --- a/docs/html_extras/repos.json +++ b/docs/html_extras/repos.json @@ -1,108 +1,13 @@ { - "errbotio/err-time": { - "TimeBot": { - "path": "timebot.plug", - "repo": "https://github.com/errbotio/err-time", - "documentation": "what time is it ?", - "name": "TimeBot", - "python": "2+", - "avatar_url": "https://avatars.githubusercontent.com/u/15802630?v=4", - "score": -99.84 - } - }, - "errbotio/err-stalkerbot": { - "StalkerBot": { - "path": "stalkerbot.plug", - "repo": "https://github.com/errbotio/err-stalkerbot", - "documentation": "Where is this guy ?", - "name": "StalkerBot", - "python": "2+", - "avatar_url": "https://avatars.githubusercontent.com/u/15802630?v=4", - "score": -100.84 - } - }, - "errbotio/err-helloworld": { - "HelloWorld": { - "path": "helloWorld.plug", - "repo": "https://github.com/errbotio/err-helloworld", - "documentation": "let's say hello !", - "name": "HelloWorld", - "python": "2+", - "avatar_url": "https://avatars0.githubusercontent.com/u/15802630?v=4", - "score": -60.88 - } - }, - "drsm79/err-memeon": { - "MemeOn": { - "path": "meme.plug", - "repo": "https://github.com/drsm79/err-memeon", - "documentation": "let's say hello !", - "name": "MemeOn", + "AoiKuiyuyou/AoikRocketChatErrbot": { + "AoikRocketChatErrbot": { + "path": "src/aoikrocketchaterrbot/backends/aoikrocketchaterrbot.plug", + "repo": "https://github.com/AoiKuiyuyou/AoikRocketChatErrbot", + "documentation": "Errbot backend for Rocket.Chat.", + "name": "AoikRocketChatErrbot", "python": "2", - "avatar_url": "https://avatars.githubusercontent.com/u/104090?v=4", - "score": -101.84 - } - }, - "errbotio/err-tv": { - "TV": { - "path": "tv.plug", - "repo": "https://github.com/errbotio/err-tv", - "documentation": "So what's the status of this show ?", - "name": "TV", - "python": "2+", - "avatar_url": "https://avatars.githubusercontent.com/u/15802630?v=4", - "score": -72.28 - } - }, - "Beit-Hatfutsot/jewbot": { - "Jewbot": { - "path": "plugins/jewbot/jewbot.plug", - "repo": "https://github.com/Beit-Hatfutsot/jewbot", - "documentation": "Jewbot plugin", - "name": "Jewbot", - "python": "2+", - "avatar_url": "https://avatars.githubusercontent.com/u/15228676?v=4", - "score": -82.44 - } - }, - "ValhallaGamePlays/odin": { - "troll": { - "path": "odin/plugins/troll/troll.plug", - "repo": "https://github.com/ValhallaGamePlays/odin", - "documentation": "Twisted copypasta and amalgamation of callback bot", - "name": "troll", - "python": "2+", - "avatar_url": "https://avatars.githubusercontent.com/u/24510511?v=4", - "score": -49.76 - }, - "Example": { - "path": "odin/plugins/err-example/example.plug", - "repo": "https://github.com/ValhallaGamePlays/odin", - "documentation": "This is a simple plugin example to get you started.", - "name": "Example", - "python": "2+", - "avatar_url": "https://avatars.githubusercontent.com/u/24510511?v=4", - "score": -49.76 - }, - "helloworld": { - "path": "odin/plugins/helloworld/helloworld.plug", - "repo": "https://github.com/ValhallaGamePlays/odin", - "documentation": "Twisted copypasta hello world script from errbot.io", - "name": "helloworld", - "python": "2+", - "avatar_url": "https://avatars.githubusercontent.com/u/24510511?v=4", - "score": -49.76 - } - }, - "danie1cohen/errbot-kodi": { - "Kodi": { - "path": "kodi.plug", - "repo": "https://github.com/danie1cohen/errbot-kodi", - "documentation": "Interact with a networked XBMC or Kodi installation via errbot.", - "name": "Kodi", - "python": "3", - "avatar_url": "https://avatars.githubusercontent.com/u/8837255?v=4", - "score": -39.0 + "avatar_url": "https://avatars.githubusercontent.com/u/9025382?v=4", + "score": 0.33 } }, "Appleman1234/arisu": { @@ -113,7 +18,7 @@ "name": "Time", "python": "2+", "avatar_url": "https://avatars.githubusercontent.com/u/13495053?v=4", - "score": -78.8 + "score": -95.07 }, "Seen": { "path": "Seen/seen.plug", @@ -122,7 +27,7 @@ "name": "Seen", "python": "2+", "avatar_url": "https://avatars.githubusercontent.com/u/13495053?v=4", - "score": -78.8 + "score": -95.07 }, "Link": { "path": "Link/link.plug", @@ -131,7 +36,7 @@ "name": "Link", "python": "2+", "avatar_url": "https://avatars.githubusercontent.com/u/13495053?v=4", - "score": -78.8 + "score": -95.07 }, "Karma": { "path": "Karma/karma.plug", @@ -140,7 +45,7 @@ "name": "Karma", "python": "2+", "avatar_url": "https://avatars.githubusercontent.com/u/13495053?v=4", - "score": -78.8 + "score": -95.07 }, "Stream": { "path": "Stream/stream.plug", @@ -149,7 +54,7 @@ "name": "Stream", "python": "2+", "avatar_url": "https://avatars.githubusercontent.com/u/13495053?v=4", - "score": -78.8 + "score": -95.07 }, "Reports": { "path": "Reports/reports.plug", @@ -158,7 +63,7 @@ "name": "Reports", "python": "2+", "avatar_url": "https://avatars.githubusercontent.com/u/13495053?v=4", - "score": -78.8 + "score": -95.07 }, "Language": { "path": "Language/language.plug", @@ -167,7 +72,7 @@ "name": "Language", "python": "2+", "avatar_url": "https://avatars.githubusercontent.com/u/13495053?v=4", - "score": -78.8 + "score": -95.07 }, "Converter": { "path": "Converter/converter.plug", @@ -176,7 +81,7 @@ "name": "Converter", "python": "2+", "avatar_url": "https://avatars.githubusercontent.com/u/13495053?v=4", - "score": -78.8 + "score": -95.07 }, "Levenshtein": { "path": "Levenshtein/levenshtein.plug", @@ -185,7 +90,7 @@ "name": "Levenshtein", "python": "2+", "avatar_url": "https://avatars.githubusercontent.com/u/13495053?v=4", - "score": -78.8 + "score": -95.07 }, "NumberSpell": { "path": "NumberSpell/numberspell.plug", @@ -194,240 +99,1468 @@ "name": "NumberSpell", "python": "2+", "avatar_url": "https://avatars.githubusercontent.com/u/13495053?v=4", - "score": -78.8 + "score": -95.07 } }, - "matanby/st0ckbot": { - "St0ckBot": { - "path": "plugins/stockbot/st0ckbot.plug", - "repo": "https://github.com/matanby/st0ckbot", - "documentation": "A Telegram bot that fetches changes in your trust funds and stocks.", - "name": "St0ckBot", + "Ax3Effect/errbot-vk": { + "VK": { + "path": "vkbackend.plug", + "repo": "https://github.com/Ax3Effect/errbot-vk", + "documentation": "This is the VK backend for Err. (vk.com)", + "name": "VK", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/8061802?v=4", + "score": -8.92 + } + }, + "Beit-Hatfutsot/jewbot": { + "Jewbot": { + "path": "plugins/jewbot/jewbot.plug", + "repo": "https://github.com/Beit-Hatfutsot/jewbot", + "documentation": "Jewbot plugin", + "name": "Jewbot", "python": "2+", - "avatar_url": "https://avatars.githubusercontent.com/u/8208862?v=4", - "score": -23.08 + "avatar_url": "https://avatars.githubusercontent.com/u/15228676?v=4", + "score": -100.1 } }, - "attakei/errbot-teratail-fetch": { - "Teratail": { - "path": "teratail.plug", - "repo": "https://github.com/attakei/errbot-teratail-fetch", - "documentation": "Fetch and notify teratail's newer questions", - "name": "Teratail", + "ByteInternet/errbot-senderscore": { + "Senderscore": { + "path": "senderscore.plug", + "repo": "https://github.com/ByteInternet/errbot-senderscore", + "documentation": "Get the sendreputation of a given ip", + "name": "Senderscore", "python": "3", - "avatar_url": "https://avatars.githubusercontent.com/u/668834?v=4", - "score": -103.44 + "avatar_url": "https://avatars.githubusercontent.com/u/1357758?v=4", + "score": -41.07 } }, - "coala/corobo": { - "utils": { - "path": "utils/utils.plug", - "repo": "https://github.com/coala/corobo", - "documentation": "Some random utilities", - "name": "utils", + "Cloudxtreme/lctv": { + "Utils": { + "path": "errbot/core_plugins/utils.plug", + "repo": "https://github.com/Cloudxtreme/lctv", + "documentation": "Core Errbot utils commands.", + "name": "Utils", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/1732196?v=4", + "score": -123.93 + } + }, + "Djiit/err-whyd": { + "WhydBot": { + "path": "whydbot.plug", + "repo": "https://github.com/Djiit/err-whyd", + "documentation": "Basic Err integration with whyd.com", + "name": "WhydBot", "python": "3", - "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", - "score": 284.12 - }, - "SpammingAlert": { - "path": "plugins/spam.plug", - "repo": "https://github.com/coala/corobo", - "documentation": "A callback to alert the user that they might be spamming.", - "name": "SpammingAlert", + "avatar_url": "https://avatars.githubusercontent.com/u/1169844?v=4", + "score": -119.27 + } + }, + "ESSS/err-jenkins": { + "Jenkins": { + "path": "esss_jenkins.plug", + "repo": "https://github.com/ESSS/err-jenkins", + "documentation": "ESSS Jenkins workflow helper", + "name": "Jenkins", "python": "3", - "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", - "score": 284.12 - }, - "filters": { - "path": "utils/filters.plug", - "repo": "https://github.com/coala/corobo", - "documentation": "Filter and manipulate incoming commands", - "name": "filters", + "avatar_url": "https://avatars.githubusercontent.com/u/1074769?v=4", + "score": 10.44 + } + }, + "ESSS/err-stash": { + "Stash": { + "path": "err_stash.plug", + "repo": "https://github.com/ESSS/err-stash", + "documentation": "ESSS Stash workflow helper", + "name": "Stash", "python": "3", - "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", - "score": 284.12 - }, - "lmgtfy": { - "path": "plugins/lmgtfy.plug", - "repo": "https://github.com/coala/corobo", - "documentation": "For all those people who find it more convenient to bother you with their question rather than search it for themselves.", - "name": "lmgtfy", + "avatar_url": "https://avatars.githubusercontent.com/u/1074769?v=4", + "score": -42.16 + } + }, + "FreakyBytes/err-grafana-alert": { + "GrafanaAlert": { + "path": "err-grafana-alert.plug", + "repo": "https://github.com/FreakyBytes/err-grafana-alert", + "documentation": "Accepts Grafana webhook calls and posts alert messages in the chat", + "name": "GrafanaAlert", "python": "3", - "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", - "score": 284.12 - }, - "ghetto": { - "path": "plugins/ghetto.plug", - "repo": "https://github.com/coala/corobo", - "documentation": "Real talk yo", - "name": "ghetto", + "avatar_url": "https://avatars.githubusercontent.com/u/2365637?v=4", + "score": -110.03 + } + }, + "Grizzlyt/errbot-jira": { + "Jira": { + "path": "jira.plug", + "repo": "https://github.com/Grizzlyt/errbot-jira", + "documentation": "errbot plugin for working with Atlassian JIRA and parsin boards", + "name": "Jira", "python": "3", - "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", - "score": 284.12 - }, - "LabHub": { - "path": "plugins/labhub.plug", - "repo": "https://github.com/coala/corobo", - "documentation": "GitHub and GitLab utilities", - "name": "LabHub", + "avatar_url": "https://avatars.githubusercontent.com/u/13793219?v=4", + "score": -93.67 + } + }, + "Infomaniak/err-backend-kchat": { + "kChat": { + "path": "src/err-backend-kchat/err-backend-kchat.plug", + "repo": "https://github.com/Infomaniak/err-backend-kchat", + "documentation": "kChat backend for Errbot.", + "name": "kChat", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/5754857?v=4", + "score": -16.57 + } + }, + "J4LP/pingbot": { + "PingPlugin": { + "path": "pingplugin.plug", + "repo": "https://github.com/J4LP/pingbot", + "documentation": "An Err plugin for multicast", + "name": "PingPlugin", "python": "3", - "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", - "score": 284.12 - }, - "answer": { - "path": "plugins/answer.plug", - "repo": "https://github.com/coala/corobo", - "documentation": "Answer questions, intelligently ;)", - "name": "answer", + "avatar_url": "https://avatars.githubusercontent.com/u/4965488?v=4", + "score": -128.23 + } + }, + "J4LP/rooster": { + "Who": { + "path": "plugins/who.plug", + "repo": "https://github.com/J4LP/rooster", + "documentation": "gets player info from evewho", + "name": "Who", "python": "3", - "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", - "score": 284.12 + "avatar_url": "https://avatars.githubusercontent.com/u/4965488?v=4", + "score": -91.77 }, - "ship_it": { - "path": "plugins/ship_it.plug", - "repo": "https://github.com/coala/corobo", - "documentation": "Show motivational ship it squirrel images.", - "name": "ship_it", + "Ping": { + "path": "plugins/ping.plug", + "repo": "https://github.com/J4LP/rooster", + "documentation": "Err Bot plugin to ping groups of people", + "name": "Ping", "python": "3", - "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", - "score": 284.12 + "avatar_url": "https://avatars.githubusercontent.com/u/4965488?v=4", + "score": -91.77 }, - "explain": { - "path": "plugins/explain.plug", - "repo": "https://github.com/coala/corobo", - "documentation": "Explain various terms", - "name": "explain", + "Trello": { + "path": "plugins/trello.plug", + "repo": "https://github.com/J4LP/rooster", + "documentation": "Get active cards from list", + "name": "Trello", "python": "3", - "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", - "score": 284.12 + "avatar_url": "https://avatars.githubusercontent.com/u/4965488?v=4", + "score": -91.77 }, - "coatils": { - "path": "plugins/coatils.plug", - "repo": "https://github.com/coala/corobo", - "documentation": "Various coala related utilities, exposing the REST API, etc.", - "name": "coatils", + "Smiles": { + "path": "plugins/smiles.plug", + "repo": "https://github.com/J4LP/rooster", + "documentation": "herpaderpa", + "name": "Smiles", "python": "3", - "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", - "score": 284.12 + "avatar_url": "https://avatars.githubusercontent.com/u/4965488?v=4", + "score": -91.77 }, - "the_rules": { - "path": "plugins/the_rules.plug", - "repo": "https://github.com/coala/corobo", - "documentation": "List the bot rules", - "name": "the_rules", - "python": "3", - "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", - "score": 284.12 + "TimeBot": { + "path": "plugins/timebot.plug", + "repo": "https://github.com/J4LP/rooster", + "documentation": "what time is it ?", + "name": "TimeBot", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/4965488?v=4", + "score": -91.77 }, - "nevermind": { - "path": "plugins/nevermind.plug", - "repo": "https://github.com/coala/corobo", - "documentation": "Doesn't mind", - "name": "nevermind", + "EveKills": { + "path": "plugins/evekills.plug", + "repo": "https://github.com/J4LP/rooster", + "documentation": "A plugin for shaming people who die", + "name": "EveKills", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/4965488?v=4", + "score": -91.77 + }, + "Zkillwatch": { + "path": "plugins/zkillwatch.plug", + "repo": "https://github.com/J4LP/rooster", + "documentation": "throwup stats on a zkill link mentioned in chat", + "name": "Zkillwatch", "python": "3", - "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", - "score": 284.12 + "avatar_url": "https://avatars.githubusercontent.com/u/4965488?v=4", + "score": -91.77 }, - "GitStats": { - "path": "plugins/git_stats.plug", - "repo": "https://github.com/coala/corobo", - "documentation": "GitHub and GitLab statistics", - "name": "GitStats", + "EveCentral": { + "path": "plugins/evecentral.plug", + "repo": "https://github.com/J4LP/rooster", + "documentation": "Get prices in Jita via EveCentral", + "name": "EveCentral", "python": "3", - "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", - "score": 284.12 + "avatar_url": "https://avatars.githubusercontent.com/u/4965488?v=4", + "score": -91.77 }, - "pitchfork": { - "path": "plugins/pitchfork.plug", - "repo": "https://github.com/coala/corobo", - "documentation": "To pitchfork users down to ...", - "name": "pitchfork", + "VersionChecker": { + "path": "errbot/builtins/vcheck.plug", + "repo": "https://github.com/J4LP/rooster", + "documentation": "This is calling home to check if err has a new version available", + "name": "VersionChecker", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/4965488?v=4", + "score": -91.77 + }, + "notificationbot": { + "path": "plugins/NotificationBot.plug", + "repo": "https://github.com/J4LP/rooster", + "documentation": "Spam Useful Alliance Notifications to various jabber rooms", + "name": "notificationbot", "python": "3", - "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", - "score": 284.12 + "avatar_url": "https://avatars.githubusercontent.com/u/4965488?v=4", + "score": -91.77 }, - "SearchDocs": { - "path": "plugins/searchdocs.plug", - "repo": "https://github.com/coala/corobo", - "documentation": "Search API and user docs", - "name": "SearchDocs", + "ChatRoom": { + "path": "errbot/builtins/chatRoom.plug", + "repo": "https://github.com/J4LP/rooster", + "documentation": "This is a basic implementation of a chatroom", + "name": "ChatRoom", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/4965488?v=4", + "score": -91.77 + }, + "Webserver": { + "path": "errbot/builtins/webserver.plug", + "repo": "https://github.com/J4LP/rooster", + "documentation": "This is a plugin for enabling webhooks and web interface to err", + "name": "Webserver", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/4965488?v=4", + "score": -91.77 + }, + "fw": { + "path": "plugins/fwbot.plug", + "repo": "https://github.com/J4LP/rooster", + "documentation": "FW info", + "name": "fw", "python": "3", - "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", - "score": 284.12 + "avatar_url": "https://avatars.githubusercontent.com/u/4965488?v=4", + "score": -91.77 + } + }, + "MattHodge/PSErrbot": { + "pstest": { + "path": "plugins/pstest/pstest.plug", + "repo": "https://github.com/MattHodge/PSErrbot", + "documentation": "PowerShell test", + "name": "pstest", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/1966555?v=4", + "score": -57.87 + } + }, + "MattHodge/WindowsErrbot": { + "demo": { + "path": "plugins/demo/demo.plug", + "repo": "https://github.com/MattHodge/WindowsErrbot", + "documentation": "Demo functions", + "name": "demo", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/1966555?v=4", + "score": 19.77 }, - "WolframAlpha": { - "path": "plugins/wolfram_alpha.plug", - "repo": "https://github.com/coala/corobo", - "documentation": "Query the Computational Knowledge Engine", - "name": "WolframAlpha", + "hello": { + "path": "plugins/hello/hello.plug", + "repo": "https://github.com/MattHodge/WindowsErrbot", + "documentation": "Says hello", + "name": "hello", "python": "3", - "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", - "score": 284.12 + "avatar_url": "https://avatars.githubusercontent.com/u/1966555?v=4", + "score": 19.77 }, - "coala_lowercase_c": { - "path": "plugins/coala_lowercase_c.plug", - "repo": "https://github.com/coala/corobo", - "documentation": "coala is always written with a lower case c.", - "name": "coala_lowercase_c", + "secrets": { + "path": "plugins/secrets/secrets.plug", + "repo": "https://github.com/MattHodge/WindowsErrbot", + "documentation": "Demo for hiding secrets", + "name": "secrets", "python": "3", - "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", - "score": 284.12 + "avatar_url": "https://avatars.githubusercontent.com/u/1966555?v=4", + "score": 19.77 }, - "deprecate_bot_prefixes": { - "path": "plugins/deprecate_bot_prefixes.plug", - "repo": "https://github.com/coala/corobo", - "documentation": "A callback for every message that starts with depecrated prefix, hence, leaving a deprecation notice", - "name": "deprecate_bot_prefixes", + "psremote": { + "path": "plugins/psremote/psremote.plug", + "repo": "https://github.com/MattHodge/WindowsErrbot", + "documentation": "Some examples with PowerShell", + "name": "psremote", "python": "3", - "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", - "score": 284.12 + "avatar_url": "https://avatars.githubusercontent.com/u/1966555?v=4", + "score": 19.77 }, - "Ban": { - "path": "plugins/ban.plug", - "repo": "https://github.com/coala/corobo", - "documentation": "Ban/Unban from all rooms at once", - "name": "Ban", + "psexample": { + "path": "plugins/psexample/psexample.plug", + "repo": "https://github.com/MattHodge/WindowsErrbot", + "documentation": "Some examples with PowerShell", + "name": "psexample", "python": "3", - "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", - "score": 284.12 + "avatar_url": "https://avatars.githubusercontent.com/u/1966555?v=4", + "score": 19.77 } }, - "prsnnami/chatops": { - "fun": { - "path": "plugins/fun.plug", - "repo": "https://github.com/prsnnami/chatops", - "documentation": "misc", - "name": "fun", + "MattHodge/err-datadog": { + "ddog": { + "path": "ddog.plug", + "repo": "https://github.com/MattHodge/err-datadog", + "documentation": "DataDog Errbot Script", + "name": "ddog", "python": "3", - "avatar_url": "https://avatars.githubusercontent.com/u/11041007?v=4", - "score": -104.04 + "avatar_url": "https://avatars.githubusercontent.com/u/1966555?v=4", + "score": -113.63 + } + }, + "MaxwellBo/SlackVCS": { + "SlackVCS": { + "path": "slackvcs.plug", + "repo": "https://github.com/MaxwellBo/SlackVCS", + "documentation": "Version control for files uploaded to Slack", + "name": "SlackVCS", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/5368490?v=4", + "score": -120.33 + } + }, + "SADevs/sadevbot-plugins": { + "LocalWebserver": { + "path": "LocalWebserver/local-webserver.plug", + "repo": "https://github.com/SADevs/sadevbot-plugins", + "documentation": "This is a plugin for enabling webhooks and web interface to Errbot ONLY on local host", + "name": "LocalWebserver", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/30872926?v=4", + "score": -43.07 + } + }, + "Team488/meeting-bot": { + "XMeeting": { + "path": "are_we_meeting.plug", + "repo": "https://github.com/Team488/meeting-bot", + "documentation": "A meeting helper bot", + "name": "XMeeting", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/3441816?v=4", + "score": -104.97 + } + }, + "TheArchives/Inter": { + "Chat": { + "path": "plugins/chat.plug", + "repo": "https://github.com/TheArchives/Inter", + "documentation": "A plugin for relaying chat between servers", + "name": "Chat", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/1098410?v=4", + "score": -148.96 }, - "HelloWorld": { - "path": "plugins/helloworld.plug", - "repo": "https://github.com/prsnnami/chatops", - "documentation": "Example \"Hello, world!\" plugin", - "name": "HelloWorld", + "Authentication": { + "path": "plugins/auth.plug", + "repo": "https://github.com/TheArchives/Inter", + "documentation": "A plugin for simple API-key based authentication", + "name": "Authentication", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/1098410?v=4", + "score": -148.96 + }, + "Players": { + "path": "plugins/players.plug", + "repo": "https://github.com/TheArchives/Inter", + "documentation": "A plugin that tracks online players on all connected servers.", + "name": "Players", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/1098410?v=4", + "score": -148.96 + } + }, + "ValhallaGamePlays/odin": { + "helloworld": { + "path": "odin/plugins/helloworld/helloworld.plug", + "repo": "https://github.com/ValhallaGamePlays/odin", + "documentation": "Twisted copypasta hello world script from errbot.io", + "name": "helloworld", "python": "2+", - "avatar_url": "https://avatars.githubusercontent.com/u/11041007?v=4", - "score": -104.04 + "avatar_url": "https://avatars.githubusercontent.com/u/24510511?v=4", + "score": -72.53 + }, + "troll": { + "path": "odin/plugins/troll/troll.plug", + "repo": "https://github.com/ValhallaGamePlays/odin", + "documentation": "Twisted copypasta and amalgamation of callback bot", + "name": "troll", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/24510511?v=4", + "score": -87.64 + }, + "Example": { + "path": "odin/plugins/err-example/example.plug", + "repo": "https://github.com/ValhallaGamePlays/odin", + "documentation": "This is a simple plugin example to get you started.", + "name": "Example", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/24510511?v=4", + "score": -87.64 + } + }, + "Voronenko/errbot-grafana": { + "SaGrafana": { + "path": "sagrafana.plug", + "repo": "https://github.com/Voronenko/errbot-grafana", + "documentation": "Helper module for grafana ( install with https://github.com/Voronenko/errbot-grafana )", + "name": "SaGrafana", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/701233?v=4", + "score": -64.53 + } + }, + "ajoelp/err-fastlane": { + "fastlane": { + "path": "err-fastlane-deploy.plug", + "repo": "https://github.com/ajoelp/err-fastlane", + "documentation": "Deploy fastlane builds through errbot", + "name": "fastlane", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/6320967?v=4", + "score": -91.63 + } + }, + "alimac/err-factoid": { + "Factoid": { + "path": "factoid.plug", + "repo": "https://github.com/alimac/err-factoid", + "documentation": "A plugin for Errbot that allows chat users to create factoids.", + "name": "Factoid", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/1930627?v=4", + "score": 33.6 + } + }, + "alimac/err-hello": { + "HelloBot": { + "path": "hello.plug", + "repo": "https://github.com/alimac/err-hello", + "documentation": "Plugin for Errbot that responds to hello\u2019s.", + "name": "HelloBot", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/1930627?v=4", + "score": -100.4 + } + }, + "alimac/err-recme": { + "Recme": { + "path": "recme.plug", + "repo": "https://github.com/alimac/err-recme", + "documentation": "A plugin for Errbot that allows chat users to add recommendations.", + "name": "Recme", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/1930627?v=4", + "score": -101.53 + } + }, + "andrewthetechie/err-anonymous-report": { + "AnonymousReports": { + "path": "report.plug", + "repo": "https://github.com/andrewthetechie/err-anonymous-report", + "documentation": "Allow anonymous reporting of messages to admins via the bot", + "name": "AnonymousReports", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/1377314?v=4", + "score": -39.27 + } + }, + "andrewthetechie/err-aprs-backend": { + "APRSHelp": { + "path": "aprs_backend/APRSHelp.plug", + "repo": "https://github.com/andrewthetechie/err-aprs-backend", + "documentation": "APRS Friendly Help Plugin", + "name": "APRSHelp", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/1377314?v=4", + "score": 4.07 + }, + "APRSWebserver": { + "path": "aprs_backend/APRSWebserver.plug", + "repo": "https://github.com/andrewthetechie/err-aprs-backend", + "documentation": "APRS Friendly Web Plugin", + "name": "APRSWebserver", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/1377314?v=4", + "score": 4.07 + }, + "APRSHealth": { + "path": "aprs_backend/APRSHealth.plug", + "repo": "https://github.com/andrewthetechie/err-aprs-backend", + "documentation": "APRS Friendly Health Plugin", + "name": "APRSHealth", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/1377314?v=4", + "score": 4.07 + }, + "APRS": { + "path": "aprs_backend/aprs.plug", + "repo": "https://github.com/andrewthetechie/err-aprs-backend", + "documentation": "Backend for APRS", + "name": "APRS", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/1377314?v=4", + "score": 4.07 + } + }, + "andrewthetechie/err-discord-bridge": { + "DiscordBridge": { + "path": "discord_bridge/discord_bridge.plug", + "repo": "https://github.com/andrewthetechie/err-discord-bridge", + "documentation": "This is a plugin that manages a TopicADay Channel!", + "name": "DiscordBridge", + "python": "3.11.0", + "avatar_url": "https://avatars.githubusercontent.com/u/1377314?v=4", + "score": -19.23 + } + }, + "andrewthetechie/err-topic-a-day": { + "TopicADay": { + "path": "topic-a-day.plug", + "repo": "https://github.com/andrewthetechie/err-topic-a-day", + "documentation": "This is a plugin that manages a TopicADay Channel!", + "name": "TopicADay", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/1377314?v=4", + "score": -26.27 + } + }, + "andrewthetechie/errbot-chatopsanything": { + "ChatOpsAnything": { + "path": "chatops-anything.plug", + "repo": "https://github.com/andrewthetechie/errbot-chatopsanything", + "documentation": "This is a plugin that chatops enables a directory of exectables", + "name": "ChatOpsAnything", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/1377314?v=4", + "score": -27.27 + } + }, + "antman25/chatbot": { + "Mattermost": { + "path": "backends/mattermost.plug", + "repo": "https://github.com/antman25/chatbot", + "documentation": "A Mattermost backend for errbot.", + "name": "Mattermost", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/10299377?v=4", + "score": -77.17 + }, + "Shelf": { + "path": "storage/shelf.plug", + "repo": "https://github.com/antman25/chatbot", + "documentation": "This is the storage plugin for the traditional shelf store for errbot.", + "name": "Shelf", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/10299377?v=4", + "score": -77.17 + }, + "Webserver": { + "path": "core_plugins/webserver.plug", + "repo": "https://github.com/antman25/chatbot", + "documentation": "This is a plugin for enabling webhooks and web interface to Errbot.", + "name": "Webserver", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/10299377?v=4", + "score": -77.17 + }, + "Flows": { + "path": "core_plugins/flows.plug", + "repo": "https://github.com/antman25/chatbot", + "documentation": "Core Errbot commands to query and manage conversation flows.", + "name": "Flows", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/10299377?v=4", + "score": -77.17 + }, + "VersionChecker": { + "path": "core_plugins/vcheck.plug", + "repo": "https://github.com/antman25/chatbot", + "documentation": "This is calling home to check if Errbot has a new version available", + "name": "VersionChecker", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/10299377?v=4", + "score": -77.17 + }, + "Utils": { + "path": "core_plugins/utils.plug", + "repo": "https://github.com/antman25/chatbot", + "documentation": "Core Errbot utils commands.", + "name": "Utils", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/10299377?v=4", + "score": -77.17 + } + }, + "aram208/ai_ramblings": { + "HipChap": { + "path": "errbot-root/plugins/hipchap/hipchap.plug", + "repo": "https://github.com/aram208/ai_ramblings", + "documentation": "Custom ChatBot plugin for HipChat", + "name": "HipChap", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/1530372?v=4", + "score": -87.4 + } + }, + "arouene/err-profiles": { + "Profiles": { + "path": "profiles.plug", + "repo": "https://github.com/arouene/err-profiles", + "documentation": "ACLs with user and group management", + "name": "Profiles", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/20049990?v=4", + "score": -8.0 + } + }, + "attakei-lab/errbot-slack-bolt-backend": { + "SlackBolt": { + "path": "errbot_slack_bolt_backend/slackbolt.plug", + "repo": "https://github.com/attakei-lab/errbot-slack-bolt-backend", + "documentation": "Sladk backend by Slack Bolt", + "name": "SlackBolt", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/60003764?v=4", + "score": -14.6 + } + }, + "attakei/err-storage-yaml": { + "YAML": { + "path": "yaml.plug", + "repo": "https://github.com/attakei/err-storage-yaml", + "documentation": "YAML save/load storage for Errbot", + "name": "YAML", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/668834?v=4", + "score": -28.23 + } + }, + "attakei/errbot-cloudfront-plugin": { + "cloudfront": { + "path": "cloudfront.plug", + "repo": "https://github.com/attakei/errbot-cloudfront-plugin", + "documentation": "Control CloudFront", + "name": "cloudfront", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/668834?v=4", + "score": -82.53 + } + }, + "attakei/errbot-misc-plugins": { + "iijmio": { + "path": "iijmio/iijmio.plug", + "repo": "https://github.com/attakei/errbot-misc-plugins", + "documentation": "IIJmio monitor", + "name": "iijmio", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/668834?v=4", + "score": -108.3 + } + }, + "attakei/errbot-pomodoro-timer": { + "Pomodoro": { + "path": "pomodoro.plug", + "repo": "https://github.com/attakei/errbot-pomodoro-timer", + "documentation": "Simple pomodoro technique timer kit", + "name": "Pomodoro", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/668834?v=4", + "score": -45.77 + } + }, + "attakei/errbot-route53-plugin": { + "route53": { + "path": "route53.plug", + "repo": "https://github.com/attakei/errbot-route53-plugin", + "documentation": "Control Route 53", + "name": "route53", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/668834?v=4", + "score": -82.53 + } + }, + "attakei/errbot-teratail-fetch": { + "Teratail": { + "path": "teratail.plug", + "repo": "https://github.com/attakei/errbot-teratail-fetch", + "documentation": "Fetch and notify teratail's newer questions", + "name": "Teratail", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/668834?v=4", + "score": -117.77 + } + }, + "attakei/errcron": { + "Errcron": { + "path": "samples/errcron_demo.plug", + "repo": "https://github.com/attakei/errcron", + "documentation": "Crontab implementation for Errbot(It is a demo plugin)", + "name": "Errcron", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/668834?v=4", + "score": 51.07 + } + }, + "benvd/err-jenkins": { + "JenkinsBot": { + "path": "jenkinsbot.plug", + "repo": "https://github.com/benvd/err-jenkins", + "documentation": "Integrate with Jenkins CI", + "name": "JenkinsBot", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/332862?v=4", + "score": -52.44 + } + }, + "bergbrains/dns-status-errbot-plugin": { + "DNSStatusPlugin": { + "path": "dns_status/dns_status.plug", + "repo": "https://github.com/bergbrains/dns-status-errbot-plugin", + "documentation": "Check DNS server responsiveness and resolution time", + "name": "DNSStatusPlugin", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/443102?v=4", + "score": -6.27 + } + }, + "br0ziliy/err-ansible": { + "Ansible": { + "path": "ansible.plug", + "repo": "https://github.com/br0ziliy/err-ansible", + "documentation": "An Err plugin to run Ansible commands", + "name": "Ansible", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/1941223?v=4", + "score": 0.17 + } + }, + "brandverity/tcs_bot": { + "FoodBot": { + "path": "tcs.plug", + "repo": "https://github.com/brandverity/tcs_bot", + "documentation": "Foodbot bot", + "name": "FoodBot", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/15149312?v=4", + "score": -116.03 + } + }, + "cardoso/errbot-rocketchat": { + "RocketChat": { + "path": "src/rocketchat/backends/rocketchat.plug", + "repo": "https://github.com/cardoso/errbot-rocketchat", + "documentation": "Rocket.Chat backend for Errbot.", + "name": "RocketChat", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/5606812?v=4", + "score": 38.87 + } + }, + "cloudflare/GHC-Errbot": { + "Google-Hangouts-Chat": { + "path": "hangouts-chat.plug", + "repo": "https://github.com/cloudflare/GHC-Errbot", + "documentation": "A Google-Hangouts-Chat backend for Err", + "name": "Google-Hangouts-Chat", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/314135?v=4", + "score": 73.2 + } + }, + "coala/corobo": { + "the_rules": { + "path": "plugins/the_rules.plug", + "repo": "https://github.com/coala/corobo", + "documentation": "List the bot rules", + "name": "the_rules", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", + "score": 285.1 + }, + "nevermind": { + "path": "plugins/nevermind.plug", + "repo": "https://github.com/coala/corobo", + "documentation": "Doesn't mind", + "name": "nevermind", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", + "score": 285.1 + }, + "lmgtfy": { + "path": "plugins/lmgtfy.plug", + "repo": "https://github.com/coala/corobo", + "documentation": "For all those people who find it more convenient to bother you with their question rather than search it for themselves.", + "name": "lmgtfy", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", + "score": 285.1 + }, + "SearchDocs": { + "path": "plugins/searchdocs.plug", + "repo": "https://github.com/coala/corobo", + "documentation": "Search API and user docs", + "name": "SearchDocs", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", + "score": 285.1 + }, + "GitStats": { + "path": "plugins/git_stats.plug", + "repo": "https://github.com/coala/corobo", + "documentation": "GitHub and GitLab statistics", + "name": "GitStats", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", + "score": 285.1 + }, + "ship_it": { + "path": "plugins/ship_it.plug", + "repo": "https://github.com/coala/corobo", + "documentation": "Show motivational ship it squirrel images.", + "name": "ship_it", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", + "score": 285.1 + }, + "WolframAlpha": { + "path": "plugins/wolfram_alpha.plug", + "repo": "https://github.com/coala/corobo", + "documentation": "Query the Computational Knowledge Engine", + "name": "WolframAlpha", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", + "score": 285.1 + }, + "answer": { + "path": "plugins/answer.plug", + "repo": "https://github.com/coala/corobo", + "documentation": "Answer questions, intelligently ;)", + "name": "answer", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", + "score": 285.1 + }, + "pitchfork": { + "path": "plugins/pitchfork.plug", + "repo": "https://github.com/coala/corobo", + "documentation": "To pitchfork users down to ...", + "name": "pitchfork", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", + "score": 285.1 + }, + "explain": { + "path": "plugins/explain.plug", + "repo": "https://github.com/coala/corobo", + "documentation": "Explain various terms", + "name": "explain", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", + "score": 285.1 + }, + "LabHub": { + "path": "plugins/labhub.plug", + "repo": "https://github.com/coala/corobo", + "documentation": "GitHub and GitLab utilities", + "name": "LabHub", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", + "score": 285.1 + }, + "ghetto": { + "path": "plugins/ghetto.plug", + "repo": "https://github.com/coala/corobo", + "documentation": "Real talk yo", + "name": "ghetto", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", + "score": 285.1 + }, + "utils": { + "path": "utils/utils.plug", + "repo": "https://github.com/coala/corobo", + "documentation": "Some random utilities", + "name": "utils", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", + "score": 283.32 + }, + "SpammingAlert": { + "path": "plugins/spam.plug", + "repo": "https://github.com/coala/corobo", + "documentation": "A callback to alert the user that they might be spamming.", + "name": "SpammingAlert", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", + "score": 283.32 + }, + "filters": { + "path": "utils/filters.plug", + "repo": "https://github.com/coala/corobo", + "documentation": "Filter and manipulate incoming commands", + "name": "filters", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", + "score": 283.32 + }, + "coatils": { + "path": "plugins/coatils.plug", + "repo": "https://github.com/coala/corobo", + "documentation": "Various coala related utilities, exposing the REST API, etc.", + "name": "coatils", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", + "score": 283.32 + }, + "coala_lowercase_c": { + "path": "plugins/coala_lowercase_c.plug", + "repo": "https://github.com/coala/corobo", + "documentation": "coala is always written with a lower case c.", + "name": "coala_lowercase_c", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", + "score": 283.32 + }, + "deprecate_bot_prefixes": { + "path": "plugins/deprecate_bot_prefixes.plug", + "repo": "https://github.com/coala/corobo", + "documentation": "A callback for every message that starts with depecrated prefix, hence, leaving a deprecation notice", + "name": "deprecate_bot_prefixes", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", + "score": 283.32 + }, + "Ban": { + "path": "plugins/ban.plug", + "repo": "https://github.com/coala/corobo", + "documentation": "Ban/Unban from all rooms at once", + "name": "Ban", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/10620750?v=4", + "score": 283.32 + } + }, + "codebam/python-sparklebot": { + "Shelf": { + "path": "errbot/storage/shelf.plug", + "repo": "https://github.com/codebam/python-sparklebot", + "documentation": "This is the storage plugin for the traditional shelf store for errbot.", + "name": "Shelf", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/6035884?v=4", + "score": -75.83 + }, + "Webserver": { + "path": "errbot/core_plugins/webserver.plug", + "repo": "https://github.com/codebam/python-sparklebot", + "documentation": "This is a plugin for enabling webhooks and web interface to Errbot.", + "name": "Webserver", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/6035884?v=4", + "score": -75.83 + }, + "Flows": { + "path": "errbot/core_plugins/flows.plug", + "repo": "https://github.com/codebam/python-sparklebot", + "documentation": "Core Errbot commands to query and manage conversation flows.", + "name": "Flows", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/6035884?v=4", + "score": -75.83 + }, + "VersionChecker": { + "path": "errbot/core_plugins/vcheck.plug", + "repo": "https://github.com/codebam/python-sparklebot", + "documentation": "This is calling home to check if Errbot has a new version available", + "name": "VersionChecker", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/6035884?v=4", + "score": -75.83 + }, + "Utils": { + "path": "errbot/core_plugins/utils.plug", + "repo": "https://github.com/codebam/python-sparklebot", + "documentation": "Core Errbot utils commands.", + "name": "Utils", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/6035884?v=4", + "score": -75.83 + }, + "Mention": { + "path": "tests/mention_plugin/mention.plug", + "repo": "https://github.com/codebam/python-sparklebot", + "documentation": "An Errbot mention test plugin.", + "name": "Mention", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/6035884?v=4", + "score": -75.83 + }, + "IRC": { + "path": "errbot/backends/irc.plug", + "repo": "https://github.com/codebam/python-sparklebot", + "documentation": "This is the IRC backend for Err.", + "name": "IRC", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/6035884?v=4", + "score": -93.0 + }, + "XMPP": { + "path": "errbot/backends/xmpp.plug", + "repo": "https://github.com/codebam/python-sparklebot", + "documentation": "This is the XMPP backend for Err.", + "name": "XMPP", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/6035884?v=4", + "score": -93.0 + }, + "Null": { + "path": "errbot/backends/null.plug", + "repo": "https://github.com/codebam/python-sparklebot", + "documentation": "This is the Null backend for Err.", + "name": "Null", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/6035884?v=4", + "score": -93.0 + }, + "Text": { + "path": "errbot/backends/text.plug", + "repo": "https://github.com/codebam/python-sparklebot", + "documentation": "This is the text backend for Err.", + "name": "Text", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/6035884?v=4", + "score": -93.0 + }, + "Slack": { + "path": "errbot/backends/slack.plug", + "repo": "https://github.com/codebam/python-sparklebot", + "documentation": "This is the slack backend for Err.", + "name": "Slack", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/6035884?v=4", + "score": -93.0 + }, + "Memory": { + "path": "errbot/storage/memory.plug", + "repo": "https://github.com/codebam/python-sparklebot", + "documentation": "This is the storage plugin for an in-memory store (non-persistent).", + "name": "Memory", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/6035884?v=4", + "score": -93.0 + }, + "Hipchat": { + "path": "errbot/backends/hipchat.plug", + "repo": "https://github.com/codebam/python-sparklebot", + "documentation": "This is the hipchat backend for Err.", + "name": "Hipchat", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/6035884?v=4", + "score": -93.0 + }, + "Graphic": { + "path": "errbot/backends/graphic.plug", + "repo": "https://github.com/codebam/python-sparklebot", + "documentation": "This is the graphic backend for Err.", + "name": "Graphic", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/6035884?v=4", + "score": -93.0 + }, + "Help": { + "path": "errbot/core_plugins/help.plug", + "repo": "https://github.com/codebam/python-sparklebot", + "documentation": "Core plugin of help related functions.", + "name": "Help", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/6035884?v=4", + "score": -93.0 + }, + "Example": { + "path": "errbot/templates/initdir/example.plug", + "repo": "https://github.com/codebam/python-sparklebot", + "documentation": "This is a simple plugin example to get you started.", + "name": "Example", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/6035884?v=4", + "score": -93.0 + }, + "ChatRoom": { + "path": "errbot/core_plugins/chatRoom.plug", + "repo": "https://github.com/codebam/python-sparklebot", + "documentation": "This is a basic implementation of a chatroom", + "name": "ChatRoom", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/6035884?v=4", + "score": -93.0 + }, + "Backup": { + "path": "errbot/core_plugins/backup.plug", + "repo": "https://github.com/codebam/python-sparklebot", + "documentation": "This core plugin manage import and export of data from Err.", + "name": "Backup", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/6035884?v=4", + "score": -93.0 + }, + "Test": { + "path": "errbot/backends/test.plug", + "repo": "https://github.com/codebam/python-sparklebot", + "documentation": "This is the test backend for Err.", + "name": "Test", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/6035884?v=4", + "score": -93.0 + }, + "Test hooks for webhooks testing": { + "path": "tests/webhooks_plugin/webtest.plug", + "repo": "https://github.com/codebam/python-sparklebot", + "documentation": "", + "name": "Test hooks for webhooks testing", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/6035884?v=4", + "score": -93.0 + }, + "Circular4": { + "path": "tests/dependent_plugins/circular4.plug", + "repo": "https://github.com/codebam/python-sparklebot", + "documentation": "", + "name": "Circular4", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/6035884?v=4", + "score": -93.0 + }, + "FlowTest": { + "path": "tests/flow_plugin/flowtest.plug", + "repo": "https://github.com/codebam/python-sparklebot", + "documentation": "", + "name": "FlowTest", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/6035884?v=4", + "score": -93.0 + }, + "Parent1": { + "path": "tests/dependent_plugins/parent1.plug", + "repo": "https://github.com/codebam/python-sparklebot", + "documentation": "", + "name": "Parent1", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/6035884?v=4", + "score": -93.0 + }, + "Circular1": { + "path": "tests/dependent_plugins/circular1.plug", + "repo": "https://github.com/codebam/python-sparklebot", + "documentation": "", + "name": "Circular1", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/6035884?v=4", + "score": -93.0 + }, + "Circular3": { + "path": "tests/dependent_plugins/circular3.plug", + "repo": "https://github.com/codebam/python-sparklebot", + "documentation": "", + "name": "Circular3", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/6035884?v=4", + "score": -93.0 + }, + "Broken": { + "path": "tests/borken_plugin/broken.plug", + "repo": "https://github.com/codebam/python-sparklebot", + "documentation": "This is totally broken, don't use it.", + "name": "Broken", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/6035884?v=4", + "score": -93.0 + }, + "Plugins": { + "path": "errbot/core_plugins/plugins.plug", + "repo": "https://github.com/codebam/python-sparklebot", + "documentation": "Commands to manage the plugins of the bot by chatting.", + "name": "Plugins", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/6035884?v=4", + "score": -93.0 + }, + "Telegram": { + "path": "errbot/backends/telegram_messenger.plug", + "repo": "https://github.com/codebam/python-sparklebot", + "documentation": "This is the Telegram backend for Err.", + "name": "Telegram", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/6035884?v=4", + "score": -93.0 + }, + "Dyna": { + "path": "tests/dyna_plugin/dyna.plug", + "repo": "https://github.com/codebam/python-sparklebot", + "documentation": "", + "name": "Dyna", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/6035884?v=4", + "score": -93.0 + }, + "Single": { + "path": "tests/dependent_plugins/single.plug", + "repo": "https://github.com/codebam/python-sparklebot", + "documentation": "", + "name": "Single", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/6035884?v=4", + "score": -93.0 + }, + "Circular2": { + "path": "tests/dependent_plugins/circular2.plug", + "repo": "https://github.com/codebam/python-sparklebot", + "documentation": "", + "name": "Circular2", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/6035884?v=4", + "score": -93.0 + } + }, + "come-maiz/snappy-m-o": { + "AutopkgtestGithub": { + "path": "plugins/autopkgtest_github/autopkgtest_github.plug", + "repo": "https://github.com/come-maiz/snappy-m-o", + "documentation": "Trigger the autopkgtests for GitHub pull requests", + "name": "AutopkgtestGithub", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/617831?v=4", + "score": -110.03 + }, + "SnapcraftGithub": { + "path": "plugins/snapcraft_github/snapcraft_github.plug", + "repo": "https://github.com/come-maiz/snappy-m-o", + "documentation": "Handle GitHub webhooks from the snapcraft repository", + "name": "SnapcraftGithub", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/617831?v=4", + "score": -110.03 + }, + "SnapcraftTravis": { + "path": "plugins/snapcraft_travis/snapcraft_travis.plug", + "repo": "https://github.com/come-maiz/snappy-m-o", + "documentation": "Handle Travis requests with the Travis API", + "name": "SnapcraftTravis", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/617831?v=4", + "score": -110.03 + } + }, + "coolshiva123/wrcbot": { + "tryme": { + "path": "Docker Expts/docker_exps3/src/plugins/tryme.plug", + "repo": "https://github.com/coolshiva123/wrcbot", + "documentation": "tryme Errbot utils commands.", + "name": "tryme", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/12410857?v=4", + "score": -9.97 + }, + "aha": { + "path": "Docker Expts/docker_exps3/src/plugins/aha.plug", + "repo": "https://github.com/coolshiva123/wrcbot", + "documentation": "aha Errbot utils commands.", + "name": "aha", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/12410857?v=4", + "score": -9.97 + }, + "alive": { + "path": "Docker Expts/docker_exps3/src/plugins/alive.plug", + "repo": "https://github.com/coolshiva123/wrcbot", + "documentation": "tryme Errbot utils commands.", + "name": "alive", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/12410857?v=4", + "score": -9.97 + }, + "helloworld": { + "path": "Docker Expts/docker_exps/src/plugins/helloworld.plug", + "repo": "https://github.com/coolshiva123/wrcbot", + "documentation": "Helloworld Errbot utils commands.", + "name": "helloworld", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/12410857?v=4", + "score": -9.97 }, - "commands": { - "path": "plugins/commands.plug", - "repo": "https://github.com/prsnnami/chatops", - "documentation": "bot commands", - "name": "commands", + "mypriorlife": { + "path": "Docker Expts/docker_exps2/src/plugins/mypriorlife.plug", + "repo": "https://github.com/coolshiva123/wrcbot", + "documentation": "tryme Errbot utils commands.", + "name": "mypriorlife", "python": "3", - "avatar_url": "https://avatars.githubusercontent.com/u/11041007?v=4", - "score": -104.04 + "avatar_url": "https://avatars.githubusercontent.com/u/12410857?v=4", + "score": -9.97 + } + }, + "cweiske/errbot-exec": { + "exec": { + "path": "exec.plug", + "repo": "https://github.com/cweiske/errbot-exec", + "documentation": "Execute a command when the bot is talked to", + "name": "exec", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/59036?v=4", + "score": -92.47 + } + }, + "cyberhiker/err-sonos": { + "Sonos": { + "path": "sonos.plug", + "repo": "https://github.com/cyberhiker/err-sonos", + "documentation": "Control Sonos speakers via ErrBot.", + "name": "Sonos", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/903511?v=4", + "score": -46.67 + } + }, + "debojitkakoti/atraey": { + "Metricsbot": { + "path": "bot/err-metrics/metricsbot.plug", + "repo": "https://github.com/debojitkakoti/atraey", + "documentation": "This is a errbot metrics plugin.", + "name": "Metricsbot", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/6252201?v=4", + "score": -105.67 }, "Example": { - "path": "plugins/err-example/example.plug", - "repo": "https://github.com/prsnnami/chatops", + "path": "bot/plugins/err-example/example.plug", + "repo": "https://github.com/debojitkakoti/atraey", "documentation": "This is a simple plugin example to get you started.", "name": "Example", "python": "2+", - "avatar_url": "https://avatars.githubusercontent.com/u/11041007?v=4", - "score": -104.04 + "avatar_url": "https://avatars.githubusercontent.com/u/6252201?v=4", + "score": -128.4 + }, + "Jenkinsbot": { + "path": "bot/plugins/err-jenkinsbot/jenkinsbot.plug", + "repo": "https://github.com/debojitkakoti/atraey", + "documentation": "This is a Atraey Bot jenkins plugin.", + "name": "Jenkinsbot", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/6252201?v=4", + "score": -128.4 + } + }, + "dmsimard/teamchat": { + "teamchat": { + "path": "teamchat/errbot/plugins/teamchat.plug", + "repo": "https://github.com/dmsimard/teamchat", + "documentation": "teamchat", + "name": "teamchat", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/1291204?v=4", + "score": -3.2 + } + }, + "drsm79/botify": { + "Botify": { + "path": "botify.plug", + "repo": "https://github.com/drsm79/botify", + "documentation": "let's listen to musics!", + "name": "Botify", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/104090?v=4", + "score": -61.4 + } + }, + "drsm79/mybot": { + "Bus": { + "path": "plugins/bus.plug", + "repo": "https://github.com/drsm79/mybot", + "documentation": "let's say hello !", + "name": "Bus", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/104090?v=4", + "score": -64.4 + }, + "Duck": { + "path": "plugins/duck.plug", + "repo": "https://github.com/drsm79/mybot", + "documentation": "Rubber duck debugging at it's best", + "name": "Duck", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/104090?v=4", + "score": -64.4 + }, + "Http": { + "path": "plugins/http.plug", + "repo": "https://github.com/drsm79/mybot", + "documentation": "Look up http return codes", + "name": "Http", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/104090?v=4", + "score": -64.4 + }, + "Doge": { + "path": "plugins/doge.plug", + "repo": "https://github.com/drsm79/mybot", + "documentation": "Make a doge", + "name": "Doge", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/104090?v=4", + "score": -64.4 + }, + "Mike": { + "path": "plugins/mike.plug", + "repo": "https://github.com/drsm79/mybot", + "documentation": "Mike Wallace is the best person ever [ping!]", + "name": "Mike", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/104090?v=4", + "score": -64.4 + }, + "FreshPots": { + "path": "plugins/pots.plug", + "repo": "https://github.com/drsm79/mybot", + "documentation": "let's say hello !", + "name": "FreshPots", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/104090?v=4", + "score": -64.4 + } + }, + "ericfode/err-pubsub": { + "Pubsub": { + "path": "pubsub.plug", + "repo": "https://github.com/ericfode/err-pubsub", + "documentation": "This plugin allows errbot to subscribe to google pubsub.", + "name": "Pubsub", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/50846?v=4", + "score": -33.03 + } + }, + "errbotio/err-backend-discord": { + "Discord": { + "path": "src/err-backend-discord/err-backend-discord.plug", + "repo": "https://github.com/errbotio/err-backend-discord", + "documentation": "Discord backend for Errbot.", + "name": "Discord", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/15802630?v=4", + "score": 83.73 + } + }, + "errbotio/err-backend-gitter": { + "Gitter": { + "path": "gitter.plug", + "repo": "https://github.com/errbotio/err-backend-gitter", + "documentation": "This is a backend implementation for gitter.im.", + "name": "Gitter", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/15802630?v=4", + "score": 44.72 } }, "errbotio/err-backend-mattermost": { @@ -438,7 +1571,7 @@ "name": "Mattermost", "python": "2", "avatar_url": "https://avatars.githubusercontent.com/u/15802630?v=4", - "score": 139.28 + "score": 132.57 }, "TestPlugin": { "path": "tests/plugins/test.plug", @@ -447,18 +1580,717 @@ "name": "TestPlugin", "python": "3", "avatar_url": "https://avatars.githubusercontent.com/u/15802630?v=4", - "score": 139.28 + "score": 129.48 + } + }, + "errbotio/err-backend-slackv3": { + "SlackV3": { + "path": "src/slackv3/slackv3.plug", + "repo": "https://github.com/errbotio/err-backend-slackv3", + "documentation": "Backend for Slack's Real Time Messaging and Events APIs.", + "name": "SlackV3", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/15802630?v=4", + "score": 115.16 + } + }, + "errbotio/err-backend-tester": { + "Err plugin to test fondamentals of a backend.": { + "path": "betester.plug", + "repo": "https://github.com/errbotio/err-backend-tester", + "documentation": "series of command to test if a backend is consistent.", + "name": "Err plugin to test fondamentals of a backend.", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/15802630?v=4", + "score": -110.57 + } + }, + "errbotio/err-code": { + "Code": { + "path": "code.plug", + "repo": "https://github.com/errbotio/err-code", + "documentation": "Allow to \"execute code\" in the bot", + "name": "Code", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/15802630?v=4", + "score": -75.36 + } + }, + "errbotio/err-devops-borat": { + "DevOpsBorat": { + "path": "devops_borat.plug", + "repo": "https://github.com/errbotio/err-devops-borat", + "documentation": "displays a random @DEVOPS_BORAT quote", + "name": "DevOpsBorat", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/15802630?v=4", + "score": -81.36 + } + }, + "errbotio/err-gitbot": { + "GitBot": { + "path": "gitbot.plug", + "repo": "https://github.com/errbotio/err-gitbot", + "documentation": "Some tools to follow your git repositories", + "name": "GitBot", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/15802630?v=4", + "score": -13.44 + } + }, + "errbotio/err-guess-a-number": { + "guess": { + "path": "guess.plug", + "repo": "https://github.com/errbotio/err-guess-a-number", + "documentation": "Example of errbot flows", + "name": "guess", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/15802630?v=4", + "score": -42.63 + } + }, + "errbotio/err-nettools": { + "Nettools": { + "path": "nettools.plug", + "repo": "https://github.com/errbotio/err-nettools", + "documentation": "various network query tools", + "name": "Nettools", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/15802630?v=4", + "score": -38.03 + } + }, + "errbotio/err-otp": { + "OTP": { + "path": "otp.plug", + "repo": "https://github.com/errbotio/err-otp", + "documentation": "This adds OTP feature to errbot.", + "name": "OTP", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/15802630?v=4", + "score": -31.33 + } + }, + "errbotio/err-poll": { + "Poll": { + "path": "poll.plug", + "repo": "https://github.com/errbotio/err-poll", + "documentation": "let's decide what to do", + "name": "Poll", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/15802630?v=4", + "score": -9.44 + } + }, + "errbotio/err-storage-redis": { + "Redis": { + "path": "redisstorage.plug", + "repo": "https://github.com/errbotio/err-storage-redis", + "documentation": "This is the storage plugin for Redis.", + "name": "Redis", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/15802630?v=4", + "score": 26.4 + } + }, + "errbotio/err-storage-sql": { + "SQL": { + "path": "sql.plug", + "repo": "https://github.com/errbotio/err-storage-sql", + "documentation": "This is the errbot storage plugin for SQL. It is compatible with Firebird, Microsoft SQL Server, MySQL, Oracle, PostgreSQL, SQLite, Sybase, IBM DB2, Amazon Redshift, exasol, Sybase SQL Anywhere, MonetDB.", + "name": "SQL", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/15802630?v=4", + "score": 47.63 + } + }, + "errbotio/err-timemachine": { + "TimeMachine": { + "path": "timemachine.plug", + "repo": "https://github.com/errbotio/err-timemachine", + "documentation": "let's go back in time !", + "name": "TimeMachine", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/15802630?v=4", + "score": -70.7 + } + }, + "errbotters/err-rssreader": { + "RSSReader": { + "path": "rssreader.plug", + "repo": "https://github.com/errbotters/err-rssreader", + "documentation": "Get newest content from your favorite RSS feeds via your Errbot.", + "name": "RSSReader", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/19437736?v=4", + "score": -114.17 + } + }, + "fernand0/err-forward": { + "ErrForward": { + "path": "errForward.plug", + "repo": "https://github.com/fernand0/err-forward", + "documentation": "An Err plugin for forwarding instructions", + "name": "ErrForward", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/2467?v=4", + "score": 15.03 + } + }, + "fernand0/err-notes": { + "NoteTaker": { + "path": "note_taker.plug", + "repo": "https://github.com/fernand0/err-notes", + "documentation": "A plugin to manage your notes via Errbot.", + "name": "NoteTaker", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/2467?v=4", + "score": -0.37 + } + }, + "fictive-kin/err-githubapi": { + "GitHubApi": { + "path": "githubapi.plug", + "repo": "https://github.com/fictive-kin/err-githubapi", + "documentation": "Retrieves useful information from GitHub based on conversations", + "name": "GitHubApi", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/122928626?v=4", + "score": -25.63 + } + }, + "fmnisme/err-stackstorm": { + "St2": { + "path": "st2.plug", + "repo": "https://github.com/fmnisme/err-stackstorm", + "documentation": "StackStorm chatops plugin for Errbot.", + "name": "St2", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/5197501?v=4", + "score": 42.3 + } + }, + "fneu/meeterr": { + "meeterr": { + "path": "meeterr.plug", + "repo": "https://github.com/fneu/meeterr", + "documentation": "organize a meeting with errbot", + "name": "meeterr", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/7591685?v=4", + "score": -103.3 + } + }, + "foxxyz/bookiebot": { + "BookieBot": { + "path": "bookiebot.plug", + "repo": "https://github.com/foxxyz/bookiebot", + "documentation": "Football Betting Bot", + "name": "BookieBot", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/2602605?v=4", + "score": -101.97 + } + }, + "frozenfoxx/err-cracksh": { + "CrackSh": { + "path": "cracksh.plug", + "repo": "https://github.com/frozenfoxx/err-cracksh", + "documentation": "An Errbot plugin for the https://crack.sh API.", + "name": "CrackSh", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/495325?v=4", + "score": -97.63 + } + }, + "gbin/err-xkcdcharts": { + "XKCDCharts": { + "path": "xkcdcharts.plug", + "repo": "https://github.com/gbin/err-xkcdcharts", + "documentation": "Draw XKCD looking charts in your chatroom.", + "name": "XKCDCharts", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/975564?v=4", + "score": -71.67 + } + }, + "ghoti/Rooster": { + "Who": { + "path": "plugins/who.plug", + "repo": "https://github.com/ghoti/Rooster", + "documentation": "gets player info from evewho", + "name": "Who", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/34587?v=4", + "score": -113.57 + }, + "Ping": { + "path": "plugins/ping.plug", + "repo": "https://github.com/ghoti/Rooster", + "documentation": "Err Bot plugin to ping groups of people", + "name": "Ping", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/34587?v=4", + "score": -113.57 + }, + "Trello": { + "path": "plugins/trello.plug", + "repo": "https://github.com/ghoti/Rooster", + "documentation": "Get active cards from list", + "name": "Trello", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/34587?v=4", + "score": -113.57 + }, + "Smiles": { + "path": "plugins/smiles.plug", + "repo": "https://github.com/ghoti/Rooster", + "documentation": "herpaderpa", + "name": "Smiles", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/34587?v=4", + "score": -113.57 + }, + "TimeBot": { + "path": "plugins/timebot.plug", + "repo": "https://github.com/ghoti/Rooster", + "documentation": "what time is it ?", + "name": "TimeBot", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/34587?v=4", + "score": -113.57 + }, + "EveKills": { + "path": "plugins/evekills.plug", + "repo": "https://github.com/ghoti/Rooster", + "documentation": "A plugin for shaming people who die", + "name": "EveKills", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/34587?v=4", + "score": -113.57 + }, + "Zkillwatch": { + "path": "plugins/zkillwatch.plug", + "repo": "https://github.com/ghoti/Rooster", + "documentation": "throwup stats on a zkill link mentioned in chat", + "name": "Zkillwatch", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/34587?v=4", + "score": -113.57 + }, + "EveCentral": { + "path": "plugins/evecentral.plug", + "repo": "https://github.com/ghoti/Rooster", + "documentation": "Get prices in Jita via EveCentral", + "name": "EveCentral", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/34587?v=4", + "score": -113.57 + }, + "VersionChecker": { + "path": "errbot/builtins/vcheck.plug", + "repo": "https://github.com/ghoti/Rooster", + "documentation": "This is calling home to check if err has a new version available", + "name": "VersionChecker", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/34587?v=4", + "score": -113.57 + }, + "notificationbot": { + "path": "plugins/NotificationBot.plug", + "repo": "https://github.com/ghoti/Rooster", + "documentation": "Spam Useful Alliance Notifications to various jabber rooms", + "name": "notificationbot", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/34587?v=4", + "score": -113.57 + }, + "ChatRoom": { + "path": "errbot/builtins/chatRoom.plug", + "repo": "https://github.com/ghoti/Rooster", + "documentation": "This is a basic implementation of a chatroom", + "name": "ChatRoom", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/34587?v=4", + "score": -113.57 + }, + "Webserver": { + "path": "errbot/builtins/webserver.plug", + "repo": "https://github.com/ghoti/Rooster", + "documentation": "This is a plugin for enabling webhooks and web interface to err", + "name": "Webserver", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/34587?v=4", + "score": -113.57 + }, + "fw": { + "path": "plugins/fwbot.plug", + "repo": "https://github.com/ghoti/Rooster", + "documentation": "FW info", + "name": "fw", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/34587?v=4", + "score": -113.57 + } + }, + "hanks/Mathbot_for_hipchat": { + "MathBot": { + "path": "mathbot.plug", + "repo": "https://github.com/hanks/Mathbot_for_hipchat", + "documentation": "Simple four operation rubes bot!", + "name": "MathBot", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/759107?v=4", + "score": -144.3 + } + }, + "harlowja/gerritbot2": { + "gerritbot": { + "path": "plugins/gerritbot/gerritbot.plug", + "repo": "https://github.com/harlowja/gerritbot2", + "documentation": "This plugin echos and formats and filters gerrit events.", + "name": "gerritbot", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/970458?v=4", + "score": -116.13 + } + }, + "hosom/err-teamcymru": { + "TeamCymru": { + "path": "teamcymru.plug", + "repo": "https://github.com/hosom/err-teamcymru", + "documentation": "This adds team cymru dns apis to errbot.", + "name": "TeamCymru", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/5017324?v=4", + "score": -121.8 + } + }, + "hosom/jarvis": { + "CbResponse": { + "path": "plugins/cb-response/cbresponse.plug", + "repo": "https://github.com/hosom/jarvis", + "documentation": "Carbon Black Response Interraction", + "name": "CbResponse", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/5017324?v=4", + "score": -95.8 + }, + "VirusTotal": { + "path": "plugins/virustotal/virustotal.plug", + "repo": "https://github.com/hosom/jarvis", + "documentation": "Interract with VirusTotal", + "name": "VirusTotal", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/5017324?v=4", + "score": -95.8 + }, + "Minemeld": { + "path": "plugins/minemeld/minemeld.plug", + "repo": "https://github.com/hosom/jarvis", + "documentation": "Interract with Minemeld to manage lists.", + "name": "Minemeld", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/5017324?v=4", + "score": -95.8 + }, + "OTP": { + "path": "plugins/otp/otp.plug", + "repo": "https://github.com/hosom/jarvis", + "documentation": "Add OTP command filter to errbot.", + "name": "OTP", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/5017324?v=4", + "score": -95.8 + }, + "nslookup": { + "path": "plugins/nslookup/nslookup.plug", + "repo": "https://github.com/hosom/jarvis", + "documentation": "Perform local dns lookups.", + "name": "nslookup", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/5017324?v=4", + "score": -95.8 + }, + "Shodan": { + "path": "plugins/shodan/shodan.plug", + "repo": "https://github.com/hosom/jarvis", + "documentation": "Interract with Shodan.io", + "name": "Shodan", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/5017324?v=4", + "score": -95.8 + }, + "TeamCymru": { + "path": "plugins/teamcymru/teamcymru.plug", + "repo": "https://github.com/hosom/jarvis", + "documentation": "Interract with TeamCymru APIs", + "name": "TeamCymru", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/5017324?v=4", + "score": -95.8 + }, + "LocalNets": { + "path": "plugins/localnets/localnets.plug", + "repo": "https://github.com/hosom/jarvis", + "documentation": "Provide a central configuration point for localnets.", + "name": "LocalNets", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/5017324?v=4", + "score": -95.8 + } + }, + "hreeder/r2bot-eve-plugins": { + "Fun": { + "path": "Fun.plug", + "repo": "https://github.com/hreeder/r2bot-eve-plugins", + "documentation": "Fun Features for the bot", + "name": "Fun", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/601246?v=4", + "score": -117.53 + }, + "Time": { + "path": "Time.plug", + "repo": "https://github.com/hreeder/r2bot-eve-plugins", + "documentation": "A set of time tools for eve players!", + "name": "Time", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/601246?v=4", + "score": -117.53 + }, + "Reddit": { + "path": "Reddit.plug", + "repo": "https://github.com/hreeder/r2bot-eve-plugins", + "documentation": "Reddit Commands", + "name": "Reddit", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/601246?v=4", + "score": -117.53 + }, + "LastFm": { + "path": "LastFm.plug", + "repo": "https://github.com/hreeder/r2bot-eve-plugins", + "documentation": "LastFm Features for the bot", + "name": "LastFm", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/601246?v=4", + "score": -117.53 + }, + "MarketTools": { + "path": "MarketTools.plug", + "repo": "https://github.com/hreeder/r2bot-eve-plugins", + "documentation": "Eve Market related tools and commands", + "name": "MarketTools", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/601246?v=4", + "score": -117.53 + } + }, + "ibelle/garakbot": { + "GarakBot": { + "path": "plugins/garak.plug", + "repo": "https://github.com/ibelle/garakbot", + "documentation": "Garak Obsidian Order Bot", + "name": "GarakBot", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/1002411?v=4", + "score": -134.63 + } + }, + "is2ei/err-backend-typetalk": { + "typetalk": { + "path": "typetalk.plug", + "repo": "https://github.com/is2ei/err-backend-typetalk", + "documentation": "This is Typetalk backend for Errbot.", + "name": "typetalk", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/3948353?v=4", + "score": -84.03 + } + }, + "jvasallo/err-plugins": { + "AWS": { + "path": "err-aws/aws.plug", + "repo": "https://github.com/jvasallo/err-plugins", + "documentation": "AWS plugin to manage virtual machines in Amazon AWS", + "name": "AWS", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/1730603?v=4", + "score": -65.44 + }, + "Jira": { + "path": "err-jira/jira.plug", + "repo": "https://github.com/jvasallo/err-plugins", + "documentation": "Jira plugin", + "name": "Jira", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/1730603?v=4", + "score": -65.44 + }, + "Salt": { + "path": "err-salt/salt.plug", + "repo": "https://github.com/jvasallo/err-plugins", + "documentation": "Salt plugin to execute remote commands", + "name": "Salt", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/1730603?v=4", + "score": -65.44 + }, + "Ping": { + "path": "err-ping/ping.plug", + "repo": "https://github.com/jvasallo/err-plugins", + "documentation": "This plugin to is to determine if bot is alive", + "name": "Ping", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/1730603?v=4", + "score": -65.44 + }, + "Zendesk": { + "path": "err-zendesk/zendesk.plug", + "repo": "https://github.com/jvasallo/err-plugins", + "documentation": "Zendesk plugin", + "name": "Zendesk", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/1730603?v=4", + "score": -65.44 + }, + "VMware": { + "path": "err-vmware/vmware.plug", + "repo": "https://github.com/jvasallo/err-plugins", + "documentation": "VMware plugin to manage virtual machines and esx hosts in vsphere 5.x", + "name": "VMware", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/1730603?v=4", + "score": -65.44 + } + }, + "kaytwo/lockbot": { + "Lockbot": { + "path": "lockbot.plug", + "repo": "https://github.com/kaytwo/lockbot", + "documentation": "Keep track of who is editing what", + "name": "Lockbot", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/587187?v=4", + "score": -128.47 + } + }, + "kdknowlton/err-reminders": { + "ReminderPlugin": { + "path": "reminders.plug", + "repo": "https://github.com/kdknowlton/err-reminders", + "documentation": "This module allows you to tell the bot in chat to give you a reminder at some specified time.", + "name": "ReminderPlugin", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/5031256?v=4", + "score": 0.88 + } + }, + "kevgliss/analys": { + "Symantec": { + "path": "analys/plugins/static/symantec/symantec.plug", + "repo": "https://github.com/kevgliss/analys", + "documentation": "\"Automatic submission to symantec\"", + "name": "Symantec", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/2262214?v=4", + "score": -105.1 + } + }, + "kyrofa/snappy-m-o": { + "AutopkgtestGithub": { + "path": "plugins/autopkgtest_github/autopkgtest_github.plug", + "repo": "https://github.com/kyrofa/snappy-m-o", + "documentation": "Trigger the autopkgtests for GitHub pull requests", + "name": "AutopkgtestGithub", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/946674?v=4", + "score": -100.07 + }, + "SnapcraftGithub": { + "path": "plugins/snapcraft_github/snapcraft_github.plug", + "repo": "https://github.com/kyrofa/snappy-m-o", + "documentation": "Handle GitHub webhooks from the snapcraft repository", + "name": "SnapcraftGithub", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/946674?v=4", + "score": -100.07 + }, + "SnapcraftTravis": { + "path": "plugins/snapcraft_travis/snapcraft_travis.plug", + "repo": "https://github.com/kyrofa/snappy-m-o", + "documentation": "Handle Travis requests with the Travis API", + "name": "SnapcraftTravis", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/946674?v=4", + "score": -100.07 + } + }, + "lagenorhynque/muse-bot": { + "MakiBot": { + "path": "src/MakiBot/maki_bot.plug", + "repo": "https://github.com/lagenorhynque/muse-bot", + "documentation": "Maki-chan chatbot plugin", + "name": "MakiBot", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/6076694?v=4", + "score": -110.47 + } + }, + "lazam/FunBot": { + "FunBot": { + "path": "funbot.plug", + "repo": "https://github.com/lazam/FunBot", + "documentation": "Bot for fun!", + "name": "FunBot", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/7956429?v=4", + "score": -107.03 + } + }, + "leitu/errbot-plugin": { + "Migrate": { + "path": "migrate.plug", + "repo": "https://github.com/leitu/errbot-plugin", + "documentation": "Migrate Storage from 7mode to BBCS", + "name": "Migrate", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/2867202?v=4", + "score": -125.93 + } + }, + "lekum/ansiblebot": { + "Ansible": { + "path": "src/plugins/ansible-bot.plug", + "repo": "https://github.com/lekum/ansiblebot", + "documentation": "\"Plugin for remotely execute Ansible one-liner commands\"", + "name": "Ansible", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/2630720?v=4", + "score": -72.33 } }, - "errbotio/err-backend-slackv3": { - "SlackV3": { - "path": "src/slackv3/slackv3.plug", - "repo": "https://github.com/errbotio/err-backend-slackv3", - "documentation": "Backend for Slack's Real Time Messaging and Events APIs.", - "name": "SlackV3", + "linuxtechie/transmission-gtalk": { + "Magnet": { + "path": "plugin/magnet.plug", + "repo": "https://github.com/linuxtechie/transmission-gtalk", + "documentation": "Add magnet to currently running transmission-daemon", + "name": "Magnet", "python": "2", - "avatar_url": "https://avatars.githubusercontent.com/u/15802630?v=4", - "score": 111.68 + "avatar_url": "https://avatars.githubusercontent.com/u/206623?v=4", + "score": -107.7 + } + }, + "marksull/err-backend-cisco-spark": { + "CiscoSpark": { + "path": "CiscoSpark.plug", + "repo": "https://github.com/marksull/err-backend-cisco-spark", + "documentation": "This is a backend implementation for Cisco Spark", + "name": "CiscoSpark", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/1705633?v=4", + "score": -26.76 } }, "marksull/err-backend-cisco-webex-teams": { @@ -469,7 +2301,7 @@ "name": "CiscoWebexTeams", "python": "3.6.0", "avatar_url": "https://avatars.githubusercontent.com/u/1705633?v=4", - "score": 80.76 + "score": 76.8 }, "ExampleFlow": { "path": "plugins/err-example-flow/exampleflow.plug", @@ -478,7 +2310,7 @@ "name": "ExampleFlow", "python": "3", "avatar_url": "https://avatars.githubusercontent.com/u/1705633?v=4", - "score": 80.76 + "score": 77.0 }, "ExampleLarge": { "path": "plugins/err-example-large/examplelarge.plug", @@ -487,7 +2319,7 @@ "name": "ExampleLarge", "python": "3", "avatar_url": "https://avatars.githubusercontent.com/u/1705633?v=4", - "score": 80.76 + "score": 76.8 }, "ExampleWithCards": { "path": "plugins/err-example-cards/examplecards.plug", @@ -496,7 +2328,7 @@ "name": "ExampleWithCards", "python": "3", "avatar_url": "https://avatars.githubusercontent.com/u/1705633?v=4", - "score": 80.76 + "score": 76.8 }, "ExampleUpload": { "path": "plugins/err-example-upload/exampleupload.plug", @@ -505,7 +2337,7 @@ "name": "ExampleUpload", "python": "3", "avatar_url": "https://avatars.githubusercontent.com/u/1705633?v=4", - "score": 80.76 + "score": 76.8 }, "ExampleSimple": { "path": "plugins/err-example-simple/examplesimple.plug", @@ -514,7 +2346,7 @@ "name": "ExampleSimple", "python": "3", "avatar_url": "https://avatars.githubusercontent.com/u/1705633?v=4", - "score": 80.76 + "score": 76.8 }, "ExampleRemember": { "path": "plugins/err-example-remember/exampleremember.plug", @@ -523,7 +2355,7 @@ "name": "ExampleRemember", "python": "3", "avatar_url": "https://avatars.githubusercontent.com/u/1705633?v=4", - "score": 80.76 + "score": 76.8 }, "ExampleNotFound": { "path": "plugins/err-example-not-found/examplenotfound.plug", @@ -532,7 +2364,7 @@ "name": "ExampleNotFound", "python": "3", "avatar_url": "https://avatars.githubusercontent.com/u/1705633?v=4", - "score": 80.76 + "score": 76.8 }, "ExampleTemplate": { "path": "plugins/err-example-templates/exampletemplate.plug", @@ -541,7 +2373,7 @@ "name": "ExampleTemplate", "python": "3", "avatar_url": "https://avatars.githubusercontent.com/u/1705633?v=4", - "score": 80.76 + "score": 77.0 }, "ExampleSendCallback": { "path": "plugins/err-example-send-callback/examplesendcallback.plug", @@ -550,113 +2382,336 @@ "name": "ExampleSendCallback", "python": "3", "avatar_url": "https://avatars.githubusercontent.com/u/1705633?v=4", - "score": 80.76 + "score": 76.8 } }, - "vasilcovsky/errbot-backend-botframework": { - "BotFramework": { - "path": "botframework.plug", - "repo": "https://github.com/vasilcovsky/errbot-backend-botframework", - "documentation": "Backend implementation for Bot Framework (https://www.botframework.com)", - "name": "BotFramework", - "python": "2", - "avatar_url": "https://avatars.githubusercontent.com/u/977901?v=4", - "score": 44.120000000000005 + "matanby/st0ckbot": { + "St0ckBot": { + "path": "plugins/stockbot/st0ckbot.plug", + "repo": "https://github.com/matanby/st0ckbot", + "documentation": "A Telegram bot that fetches changes in your trust funds and stocks.", + "name": "St0ckBot", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/8208862?v=4", + "score": -21.77 } }, - "cloudflare/GHC-Errbot": { - "Google-Hangouts-Chat": { - "path": "hangouts-chat.plug", - "repo": "https://github.com/cloudflare/GHC-Errbot", - "documentation": "A Google-Hangouts-Chat backend for Err", - "name": "Google-Hangouts-Chat", + "mathiashls/k8splugin": { + "K8sPlugin": { + "path": "k8splugin.plug", + "repo": "https://github.com/mathiashls/k8splugin", + "documentation": "Kubernetes utilities through an Errbot plugin!", + "name": "K8sPlugin", "python": "2", - "avatar_url": "https://avatars.githubusercontent.com/u/314135?v=4", - "score": 73.96 + "avatar_url": "https://avatars.githubusercontent.com/u/10950358?v=4", + "score": -70.53 } }, - "attakei/errcron": { - "Errcron": { - "path": "samples/errcron_demo.plug", - "repo": "https://github.com/attakei/errcron", - "documentation": "Crontab implementation for Errbot(It is a demo plugin)", - "name": "Errcron", + "mayflower/err-misc": { + "misc": { + "path": "misc.plug", + "repo": "https://github.com/mayflower/err-misc", + "documentation": "Misc small commands", + "name": "misc", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/536878?v=4", + "score": -94.5 + } + }, + "mayflower/errbot-alerrtmanagerr": { + "Alerrtmanagerr": { + "path": "alerrtmanagerr.plug", + "repo": "https://github.com/mayflower/errbot-alerrtmanagerr", + "documentation": "Get alerts from Prometheus Alertmanager via webhooks", + "name": "Alerrtmanagerr", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/536878?v=4", + "score": -36.0 + } + }, + "mayflower/errbot-xmppbridge": { + "xmppbridge": { + "path": "xmppbridge.plug", + "repo": "https://github.com/mayflower/errbot-xmppbridge", + "documentation": "Bridge channels to XMPP MUCs", + "name": "xmppbridge", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/536878?v=4", + "score": -117.87 + } + }, + "mayflower/jon-knows-rasa": { + "Jon": { + "path": "plugin/jon.plug", + "repo": "https://github.com/mayflower/jon-knows-rasa", + "documentation": "Errbot <3 Skills", + "name": "Jon", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/536878?v=4", + "score": -96.73 + } + }, + "nelsonam/meryl": { + "Weather": { + "path": "plugins/weather.plug", + "repo": "https://github.com/nelsonam/meryl", + "documentation": "Displays weather for a zip code", + "name": "Weather", "python": "2+", - "avatar_url": "https://avatars.githubusercontent.com/u/668834?v=4", - "score": 56.68 + "avatar_url": "https://avatars.githubusercontent.com/u/557945?v=4", + "score": -119.7 + }, + "HelloWorld": { + "path": "plugins/helloworld.plug", + "repo": "https://github.com/nelsonam/meryl", + "documentation": "Example \"Hello, world!\" plugin", + "name": "HelloWorld", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/557945?v=4", + "score": -119.7 } }, - "ESSS/err-jenkins": { - "Jenkins": { - "path": "esss_jenkins.plug", - "repo": "https://github.com/ESSS/err-jenkins", - "documentation": "ESSS Jenkins workflow helper", - "name": "Jenkins", + "netquity/err-fabric": { + "fabric": { + "path": "fabric.plug", + "repo": "https://github.com/netquity/err-fabric", + "documentation": "Execute commands in Fabric's fabfile", + "name": "fabric", "python": "3", - "avatar_url": "https://avatars.githubusercontent.com/u/1074769?v=4", - "score": 10.439999999999998 + "avatar_url": "https://avatars.githubusercontent.com/u/1807942?v=4", + "score": -56.47 } }, - "attakei/err-storage-yaml": { - "YAML": { - "path": "yaml.plug", - "repo": "https://github.com/attakei/err-storage-yaml", - "documentation": "YAML save/load storage for Errbot", - "name": "YAML", - "python": "2", - "avatar_url": "https://avatars.githubusercontent.com/u/668834?v=4", - "score": -26.880000000000003 + "netquity/err-github-jira-release": { + "release": { + "path": "release.plug", + "repo": "https://github.com/netquity/err-github-jira-release", + "documentation": "Automate releases between Jira and GitHub", + "name": "release", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/1807942?v=4", + "score": -65.43 } }, - "Team488/meeting-bot": { - "XMeeting": { - "path": "are_we_meeting.plug", - "repo": "https://github.com/Team488/meeting-bot", - "documentation": "A meeting helper bot", - "name": "XMeeting", + "netquity/err-github-merger": { + "merge": { + "path": "merge.plug", + "repo": "https://github.com/netquity/err-github-merger", + "documentation": "Merge GitHub PRs your way", + "name": "merge", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/1807942?v=4", + "score": -54.47 + } + }, + "nzlosh/err-stackstorm": { + "St2": { + "path": "src/err-stackstorm/st2.plug", + "repo": "https://github.com/nzlosh/err-stackstorm", + "documentation": "StackStorm chatops plugin for Errbot.", + "name": "St2", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/2700069?v=4", + "score": 52.27 + } + }, + "openstack/oslo.tools": { + "oslobot": { + "path": "oslobot/plugins/oslobot/oslobot.plug", + "repo": "https://github.com/openstack/oslo.tools", + "documentation": "This plugin is the goto bot for oslo admin-assistant activities.", + "name": "oslobot", "python": "2+", - "avatar_url": "https://avatars.githubusercontent.com/u/3441816?v=4", - "score": -117.76 + "avatar_url": "https://avatars.githubusercontent.com/u/324574?v=4", + "score": 27.17 } }, - "TheArchives/Inter": { - "Chat": { - "path": "plugins/chat.plug", - "repo": "https://github.com/TheArchives/Inter", - "documentation": "A plugin for relaying chat between servers", - "name": "Chat", + "pcn/err-replyguy": { + "replyguy": { + "path": "replyguy.plug", + "repo": "https://github.com/pcn/err-replyguy", + "documentation": "Stores strings and returns them when asked", + "name": "replyguy", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/1056756?v=4", + "score": -58.23 + } + }, + "phlax/errbot-pootle-build": { + "Pootle build": { + "path": "pootle-build.plug", + "repo": "https://github.com/phlax/errbot-pootle-build", + "documentation": "This is a plugin to build Pootle tarballs", + "name": "Pootle build", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/454682?v=4", + "score": -119.53 + } + }, + "phlax/errbot-remotes": { + "Remotes": { + "path": "remotes.plug", + "repo": "https://github.com/phlax/errbot-remotes", + "documentation": "Tag remote repositories", + "name": "Remotes", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/454682?v=4", + "score": -120.17 + } + }, + "prsnnami/chatops": { + "fun": { + "path": "plugins/fun.plug", + "repo": "https://github.com/prsnnami/chatops", + "documentation": "misc", + "name": "fun", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/11041007?v=4", + "score": -118.27 + }, + "commands": { + "path": "plugins/commands.plug", + "repo": "https://github.com/prsnnami/chatops", + "documentation": "bot commands", + "name": "commands", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/11041007?v=4", + "score": -118.27 + }, + "HelloWorld": { + "path": "plugins/helloworld.plug", + "repo": "https://github.com/prsnnami/chatops", + "documentation": "Example \"Hello, world!\" plugin", + "name": "HelloWorld", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/11041007?v=4", + "score": -141.92 + }, + "Example": { + "path": "plugins/err-example/example.plug", + "repo": "https://github.com/prsnnami/chatops", + "documentation": "This is a simple plugin example to get you started.", + "name": "Example", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/11041007?v=4", + "score": -141.92 + } + }, + "rawouter/err-jira": { + "Jira": { + "path": "errjira.plug", + "repo": "https://github.com/rawouter/err-jira", + "documentation": "Errbot plugin for JIRA (search, assign, create and transition issues)", + "name": "Jira", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/2701349?v=4", + "score": -50.63 + } + }, + "rdo-infra/rdobot": { + "Errbot-Sensu": { + "path": "rdobot/plugins/sensu/sensu.plug", + "repo": "https://github.com/rdo-infra/rdobot", + "documentation": "An errbot sensu monitoring plugin to do operations", + "name": "Errbot-Sensu", "python": "2", - "avatar_url": "https://avatars.githubusercontent.com/u/1098410?v=4", - "score": -148.96 + "avatar_url": "https://avatars.githubusercontent.com/u/17726819?v=4", + "score": -103.23 }, - "Authentication": { - "path": "plugins/auth.plug", - "repo": "https://github.com/TheArchives/Inter", - "documentation": "A plugin for simple API-key based authentication", - "name": "Authentication", + "Errbot-Rdo": { + "path": "rdobot/plugins/rdo/rdo.plug", + "repo": "https://github.com/rdo-infra/rdobot", + "documentation": "An errbot RDO plugin to do RDO things", + "name": "Errbot-Rdo", "python": "2", - "avatar_url": "https://avatars.githubusercontent.com/u/1098410?v=4", - "score": -148.96 + "avatar_url": "https://avatars.githubusercontent.com/u/17726819?v=4", + "score": -103.23 + } + }, + "realraum/r3bot-errbot-plugins": { + "r3food": { + "path": "r3food/r3food.plug", + "repo": "https://github.com/realraum/r3bot-errbot-plugins", + "documentation": "realraum collaborative food ordering system", + "name": "r3food", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/11165909?v=4", + "score": -110.13 }, - "Players": { - "path": "plugins/players.plug", - "repo": "https://github.com/TheArchives/Inter", - "documentation": "A plugin that tracks online players on all connected servers.", - "name": "Players", + "r3demo": { + "path": "r3demo/r3demo.plug", + "repo": "https://github.com/realraum/r3bot-errbot-plugins", + "documentation": "plugin to demo errbot stuff", + "name": "r3demo", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/11165909?v=4", + "score": -110.13 + } + }, + "redhat-infosec/err-snow": { + "ServiceNow": { + "path": "servicenow.plug", + "repo": "https://github.com/redhat-infosec/err-snow", + "documentation": "ServiceNow Integration", + "name": "ServiceNow", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/15036903?v=4", + "score": -90.13 + } + }, + "reikoNeko/icinga2bot": { + "icinga2bot": { + "path": "icinga2bot.plug", + "repo": "https://github.com/reikoNeko/icinga2bot", + "documentation": "Use errbot to talk to an Icinga2 monitoring server.", + "name": "icinga2bot", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/7728615?v=4", + "score": 23.6 + } + }, + "ringcentral/ringcentral-glip-errbot": { + "Glip": { + "path": "src/glipbackend.plug", + "repo": "https://github.com/ringcentral/ringcentral-glip-errbot", + "documentation": "Glip backend for ErrBot", + "name": "Glip", "python": "2", - "avatar_url": "https://avatars.githubusercontent.com/u/1098410?v=4", - "score": -148.96 + "avatar_url": "https://avatars.githubusercontent.com/u/6549285?v=4", + "score": 15.83 } }, - "theho/thehobot": { - "example": { - "path": "example/example.plug", - "repo": "https://github.com/theho/thehobot", - "documentation": "Just an example", - "name": "example", + "samof76/covid19helpbot": { + "Covid19HelpBot": { + "path": "covid19helpbot.plug", + "repo": "https://github.com/samof76/covid19helpbot", + "documentation": "This bot will help you find things you require during this pandemic.", + "name": "Covid19HelpBot", "python": "3", - "avatar_url": "https://avatars.githubusercontent.com/u/1423278?v=4", - "score": -136.64 + "avatar_url": "https://avatars.githubusercontent.com/u/98111?v=4", + "score": -36.07 + } + }, + "scoates/err-sentryrelay": { + "SentryRelay": { + "path": "sentryrelay.plug", + "repo": "https://github.com/scoates/err-sentryrelay", + "documentation": "relays Sentry webhook messages", + "name": "SentryRelay", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/71983?v=4", + "score": -71.2 + } + }, + "scoates/err-webrelay": { + "WebRelay": { + "path": "webrelay.plug", + "repo": "https://github.com/scoates/err-webrelay", + "documentation": "relays generic web POST messages", + "name": "WebRelay", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/71983?v=4", + "score": -71.17 } }, "shuiiiiiimu/hatter": { @@ -678,5 +2733,237 @@ "avatar_url": "https://avatars.githubusercontent.com/u/6757399?v=4", "score": -130.92 } + }, + "sijis/err-jira": { + "Jira": { + "path": "jira.plug", + "repo": "https://github.com/sijis/err-jira", + "documentation": "Jira plugin", + "name": "Jira", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/618177?v=4", + "score": -24.88 + } + }, + "sijis/err-salt": { + "Salt": { + "path": "salt.plug", + "repo": "https://github.com/sijis/err-salt", + "documentation": "Salt plugin to execute remote commands", + "name": "Salt", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/618177?v=4", + "score": -67.44 + } + }, + "spkane/classbot": { + "Students": { + "path": "plugins/students/students.plug", + "repo": "https://github.com/spkane/classbot", + "documentation": "Plugin for Errbot that manages students", + "name": "Students", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/129629?v=4", + "score": -99.3 + } + }, + "spyn/dungarmatrix": { + "BeerBot": { + "path": "plugins.old/beerbot.plug", + "repo": "https://github.com/spyn/dungarmatrix", + "documentation": "Find me this beer !", + "name": "BeerBot", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/703285?v=4", + "score": -102.5 + }, + "Skeleton": { + "path": "plugins.old/skeleton.plug", + "repo": "https://github.com/spyn/dungarmatrix", + "documentation": "An Err plugin skeleton", + "name": "Skeleton", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/703285?v=4", + "score": -102.5 + }, + "Jabberzac Magic": { + "path": "plugins/jzacMagic.plug", + "repo": "https://github.com/spyn/dungarmatrix", + "documentation": "Imported from Dungarmatic trademark", + "name": "Jabberzac Magic", + "python": "3+", + "avatar_url": "https://avatars.githubusercontent.com/u/703285?v=4", + "score": -102.5 + }, + "Jabberzac Markov": { + "path": "plugins/jzacMarkov.plug", + "repo": "https://github.com/spyn/dungarmatrix", + "documentation": "Imported from Dungarmatic trademark", + "name": "Jabberzac Markov", + "python": "3+", + "avatar_url": "https://avatars.githubusercontent.com/u/703285?v=4", + "score": -102.5 + }, + "OctopusDeploy": { + "path": "plugins.old/octopusDeploy.plug", + "repo": "https://github.com/spyn/dungarmatrix", + "documentation": "Octopus Deploy plugin", + "name": "OctopusDeploy", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/703285?v=4", + "score": -102.5 + } + }, + "swarmstack/errbot-docker": { + "AlerrtmanagerrWebex": { + "path": "local_plugins/alerrtmanagerr-webex/alerrtmanagerr.plug", + "repo": "https://github.com/swarmstack/errbot-docker", + "documentation": "Get alerts from Prometheus Alertmanager via webhooks", + "name": "AlerrtmanagerrWebex", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/42419176?v=4", + "score": -14.44 + }, + "CiscoWebexTeams": { + "path": "local_backends/err-backend-cisco-webex-teams/CiscoWebexTeams.plug", + "repo": "https://github.com/swarmstack/errbot-docker", + "documentation": "This is a backend implementation for Cisco Webex Teams", + "name": "CiscoWebexTeams", + "python": "3.9.1", + "avatar_url": "https://avatars.githubusercontent.com/u/42419176?v=4", + "score": -14.44 + } + }, + "swhitt/concord_track": { + "concord_track": { + "path": "concord_track.plug", + "repo": "https://github.com/swhitt/concord_track", + "documentation": "keep track of concord spawns in eve online, an internet spaceships game", + "name": "concord_track", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/239?v=4", + "score": -109.17 + } + }, + "theho/thehobot": { + "example": { + "path": "example/example.plug", + "repo": "https://github.com/theho/thehobot", + "documentation": "Just an example", + "name": "example", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/1423278?v=4", + "score": -121.2 + } + }, + "ubc/ltbot-encrypt": { + "Encrypt": { + "path": "encrypt.plug", + "repo": "https://github.com/ubc/ltbot-encrypt", + "documentation": "A simple plugin to encrypt strings", + "name": "Encrypt", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/1396118?v=4", + "score": -59.17 + } + }, + "ubc/ltbot-hub2lab": { + "Hub2Lab": { + "path": "hub2lab.plug", + "repo": "https://github.com/ubc/ltbot-hub2lab", + "documentation": "A Github to GitLab repo sync plugin", + "name": "Hub2Lab", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/1396118?v=4", + "score": -57.3 + } + }, + "vasilcovsky/errbot-backend-botframework": { + "BotFramework": { + "path": "botframework.plug", + "repo": "https://github.com/vasilcovsky/errbot-backend-botframework", + "documentation": "Backend implementation for Bot Framework (https://www.botframework.com)", + "name": "BotFramework", + "python": "2", + "avatar_url": "https://avatars.githubusercontent.com/u/977901?v=4", + "score": 72.0 + } + }, + "vectranetworks/CogBot": { + "cogbot": { + "path": "src/plugins/cogbot/cogbot.plug", + "repo": "https://github.com/vectranetworks/CogBot", + "documentation": "Cogbot integrates Cognito Detect and Slack", + "name": "cogbot", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/25186284?v=4", + "score": -22.77 + } + }, + "ylogx/errbot-deploy-ansible": { + "deploy": { + "path": "deploy.plug", + "repo": "https://github.com/ylogx/errbot-deploy-ansible", + "documentation": "Bot Plugin to deploy web apps using ansible", + "name": "deploy", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/3508878?v=4", + "score": -101.9 + } + }, + "ylogx/errbot-supervisor": { + "supervisor": { + "path": "supervisor.plug", + "repo": "https://github.com/ylogx/errbot-supervisor", + "documentation": "Bot Plugin to control supervisord", + "name": "supervisor", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/3508878?v=4", + "score": -109.33 + } + }, + "yuyuranium/lean-coffee": { + "Lean Coffee": { + "path": "lean_coffee.plug", + "repo": "https://github.com/yuyuranium/lean-coffee", + "documentation": "Run Lean Coffee with Errbot", + "name": "Lean Coffee", + "python": "3", + "avatar_url": "https://avatars.githubusercontent.com/u/79467307?v=4", + "score": -17.53 + } + }, + "zoni/err-dnsutils": { + "DnsUtils": { + "path": "dnsutils.plug", + "repo": "https://github.com/zoni/err-dnsutils", + "documentation": "Dns utilities: host, dig, nslookup", + "name": "DnsUtils", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/145285?v=4", + "score": -11.52 + } + }, + "zoni/err-locker": { + "Locker": { + "path": "locker.plug", + "repo": "https://github.com/zoni/err-locker", + "documentation": "Lock things to let people know you're using them.", + "name": "Locker", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/145285?v=4", + "score": -22.8 + } + }, + "zoni/errbot-kayako": { + "Kayako": { + "path": "kayako.plug", + "repo": "https://github.com/zoni/errbot-kayako", + "documentation": "A plugin to interface with Kayako helpdesk", + "name": "Kayako", + "python": "2+", + "avatar_url": "https://avatars.githubusercontent.com/u/145285?v=4", + "score": -123.9 + } } } \ No newline at end of file From 3a5db90ec8f19b1db3dd94dab92aac0b84f68c41 Mon Sep 17 00:00:00 2001 From: Sijis Aviles Date: Wed, 20 May 2026 00:04:29 -0400 Subject: [PATCH 5/5] refactor: rename files and references to use blocklist --- tools/README.md | 2 +- tools/{blacklisted.txt => blocklist.txt} | 195 ++++++++++++++++++----- tools/gen_home.py | 6 +- tools/plugin-gen.py | 30 ++-- 4 files changed, 172 insertions(+), 61 deletions(-) rename tools/{blacklisted.txt => blocklist.txt} (90%) diff --git a/tools/README.md b/tools/README.md index 9767c22f1..bb418abd4 100644 --- a/tools/README.md +++ b/tools/README.md @@ -5,7 +5,7 @@ These are support tools for the project `./plugin-gen.py` - Generates `repos.json`, which has a list of available plugins -- It will also update a `blacklisted.txt` file of false positive on the initial research to optimize subsequent ones. +- It will also update a `blocklist.txt` file of false positive on the initial research to optimize subsequent ones. - Takes a while with the API rate limit. `./gen_home.py` diff --git a/tools/blacklisted.txt b/tools/blocklist.txt similarity index 90% rename from tools/blacklisted.txt rename to tools/blocklist.txt index bb157f9e1..91b4526d7 100644 --- a/tools/blacklisted.txt +++ b/tools/blocklist.txt @@ -14,10 +14,14 @@ A-Setiabudi/HoldError-ANN AAAwesomer/ErrorRecognition AIIX/err-mycroft +AISoltani/KNN_and_Bayes_Error- ATB-UQ/trapz_errors ATIX-AG/errata_server Abissues/vocal-funny-error +AbubakrDev/Try_and_error +AbzeeSaminu/ErrorEyes-Domain-Scanner Achifaifa/IndexError +AdityaBhatt3010/When-Servers-Overshare-Information-disclosure-in-error-messages Adrien-Meilac/Quality-analysis-and-errors-statistics Ajayneethikannan/PyVoice-Syntax-Error Akansha0211/raise-error @@ -35,6 +39,7 @@ AndreaCrotti/logging_errors Andrew-Klaas/errbot_practice AndriiMazur/ErrorDecoder AndyPeee/ErrorPractice +Aolin-MIR/soft-masked-bert-for-spelling-error-correction Arafat4341/VisualizingErrorUsingMatplotlib Archan2607/IT556_The-ERRORs_DAIICT AriChow/error_propagation @@ -53,6 +58,8 @@ BYU-Hydroinformatics/HydroErr Bala9626/Hamming-De-hamming-and-error-detection Beanfield/mako-lookup-error Behoston/error-cats +BennettSchwartz/ERR-EVAL +Berkeley-Speech-Group/Phonetic-Error-Detection Bernhard10/WarnAsError BewQr3/Discord-bot-error-handler Bharathkumar-nb/Poco-Error-Detector @@ -60,6 +67,8 @@ BigDaMa/ExampleDrivenErrorDetection BigDaMa/error-generator BinWangGBLW/Dynamic-Error-Tool-QEMU Black-Boy26/ERROR1 +BruceEckel/functional_error_handling +CAMeL-Lab/arabic_error_type_annotation CD3/pyErrorProp CSCI-362-02-2016/Syntax-Error CTraverse/Transcription-Errors @@ -74,11 +83,14 @@ ClaudeXin/error_detect Cnogz/Python_ErrorHandling Cobord/ErrorCorrectingCodes CodeVigilant/error_finder +CodeWithTanim/toxic-error-cloning CodecoolKrakow20161/python-lightweight-erp-project-error_squad +Coldmist-Lu/ErrorAnalysis_NLGEvaluation Coldmist-Lu/ErrorAnalysis_Prompt CrackedP0t/ErrantBot DEGoodmanWilson/conan-libgpg-error DWalker487/error-propagation +DaSESmartEdu/ErrorCLR Danzibob/ErrorHandlingExamples DarkCasterX/ErrselaPie DarrenWong/continuous_error_map @@ -94,9 +106,11 @@ Dudu197/error-crawler Dyrcona/erratacheck EEAAC/ac_estimation_error EFXCIA/err-openstack +EKRAM-143/error-cloning ERROR4317/ERROR4317.github.io ES-DOC/esdoc-errata-client ES-DOC/esdoc-errata-ws +ESSS/err-jenkins ET-CS/TypeError-Example Edinburgh-iGEM2016/Error-Correction ElegantCow/Auscope-ErrorFinder @@ -114,6 +128,7 @@ Esiguas/Error2 Ethan-Talbert/Error-Server Evgeniy-Mamaev/bch-correcting-n-errors Evgeniy-Mamaev/code-correcting-n-errors +Evgeny-Mamaev/bch-correcting-n-errors FLomb/errorFix_Calliope_operation FanSmale/Active-learning-through-label-error-statistical-methods FelixFox/word-error-rate-calculation @@ -134,15 +149,22 @@ Gabriel-Desharnais/Module-Erreur Geethu-b/ANLP-Grammatical-Error-Correction GeoMOER/moer-msc-phygeo-if-error-continue GeorMurk/CatchingErrors +GewelsJI/ERRNet GindaChen/cs739-errceph GitManuTyagi/svrError Gnoffel/errbot-gnu-terrypratchett +Gnosisone/ERR0RS-Ultimate God3err/god3err-hack-tools +GoeSoft/Error-Validate +GoogleCloudPlatform/err-stackdriver +GrantBirki/errbot GregoryShen/08-ErrorAndDebug GridTech123/pyError Grover-c13/GithubErrorSubmission +HQSquantumsimulations/non-iid-error-correction-published HShaoY/python_error HUAZHEYINy/ErrorTest +Hamed233/ErrorTrace-Pro Happleasei/Chinese-Grammatical-error-diagnosis HealthReminder/Errant_Probe Hem-Bhatt/Bit-error-propagation-in-block-cipher-modes @@ -152,13 +174,19 @@ HideakiImamura/MinimaxErrorRate HillZhang1999/gec_error_template Hussein1147/TinyErrandsBackend I3lacx/trial_and_error +IBM/ErrorMap +IPvZero/OSPF-error-detector +Iankulani/Error-Based-SQL-Injection-Detector +IceJinx33/auto-err-template-fill Insoleet/pyinstaller-error Ionastasi/lab_errors IvanicsSz/runtime_error Iwillforgetmyusername/Error-propagation JD-P/error-journal +JagtapSagar/Error-State-Extended-Kalman-Filter Jasonmes/ERRcolor2 Jasonmes/ImagePreProcessing--ERR +JaviS-Rei/NL2SQL_Error_Empirical JayHyeonwoo/error_work JeffreyEnglish/DissolveWithError JenniferRondineau/PipelineERRBS @@ -169,11 +197,15 @@ JoeReis/python_time_series_error JonathanHiggs/flask_errors Judice/msq_error JvSlooten88/pupil_prediction_error +KalmanNet/ERRCOV_ICASSP22 Kaniabi/docker-errbot +KasraAhmadi/NTT_Error_Detection Khan/error-monitor-db KilerMaxi/trial_and_error +Kiln707/Flask_Error KingDuk/array-error KirtMorgan/error_handling +Korivash/FiveM-Error-Logs Kosuke-Szk/ErrorDetection Kurara/unittest_errors L-joker/error-log-monitor @@ -182,6 +214,7 @@ LagrangianPoint/Apache-Error-Log-Cleaner LandRegistry/lc-error-reporting LauJangit/Simulation-Of-Quantum-Communication-Error LeAustinHan/PythonCheckBlockError +LinkedInLearning/Python-Errores-comunes-como-solucionarlos-3249003 Loffe/errors-included Loqaritm/SBH_err_minus LuqueDaniel/Ninja-error-log @@ -197,6 +230,7 @@ MarceloCorpucci/spencer-errbot MarcusFlodihn/python-error-server MarissaMC/NLP_Similarity-Error-Correction Mateo-Tompkins/errorcode +Mathi27/ErrorHunter Matla/PythonErrorDisplay MephistoMMM/physics_experiment_error_calculate MetOffice/ocean_error_covs @@ -211,6 +245,9 @@ MorozYaroslavKN-B/Test-error MrAkandr/ErroChallange MrSimonC/Galaxy-Error-Log-Content MrSimonC/Galaxy-Error-Log-Interface +MudrakshnMcShaw/Executor_Error +NJU-PCALab/ERR +NSPC911/human-errors Nadiah16/ErrorCountAP Najq/fact.err NathanDoumeche/Convergence_and_error_analysis_of_PINNs @@ -231,16 +268,20 @@ Offbeatmammal/jsErrLog OkBuilds/BuckwWatchmanErrorReproduce OscarJHernandez/linear_fit_w_errors OsmanFarukO/Error-Reporting-System-DJANGO-Api +PB2204/Py-Error-Handling-Toolkit PHIEZUKE/error PabloPiaggi/HistogramWithErrorbars PaulEmmanuelSotir/learn_error_by_generalization PavelBlend/Blender_Stalker_Dm_Err +Peder2911/pac_errors PeerlessCpp/chinese-crr-err +Peiyang-Song/LLM-A-Not-B-Errors Photobucket/errbot_plugins PhyrionX/ErReSuLoNaDorH PinLiang/Check_System_Errorcode Ping-linlin/error PlasmaSheep/sphinx-error +PowerSystem2024/Error404TercerSemestre PrisoftPeter/error Pylons/pyramid_errmail Python3pkg/Flask-ReportableError @@ -256,10 +297,13 @@ RedHatHackFest/spark-error-selector Rickym270/InterfaceErrReport RobbieLePommie/Sublime_PHPLastError RobinL/glue_errors +RobotLL/ERRA Rombix92/Error_Handling RonquilloAeon/api-errors RouzbehMajidi/errorcalc RustyWraith/error_quantifier +RyotaUshio/bayes-error-estimation +S-kewen/lidar-point-cloud-error-concealment SADevs/errbot-k8s SFDO-Tooling/errors-db SI364-FA18/Error-Handling-And-DB-Setup @@ -276,14 +320,19 @@ SlicerIGT/SlicerTrackingErrorInspector SoftwareEngineering2016Group2/Errand StefanVissers/ProjectSyntaxError StevenLinNthu/Forward-Error-Correction +SudoPseudo/ErrorFlow SuezD/ErrorCalculator SunyanGu/intelligent-error-correction-NJUPT-Longaotian-Code SvenNederhoff/errbot-seen TCLamnidis/Sex.DetERRmine +TIMER-err/fuckewt360 +TITHI-KHAN/Neural-Network-and-Error-Handling TRiBByX/ErrorDatabase +TW-NLP/ChineseErrorCorrector TafBaf/ERR_Player TaqiOfficial/symfony-by-errors Tcing/TuniHack2016_Fatal_Error +TeaByte/GoodError TeflonTrout/ErrorNoPoemFound TerminalTesting/js_error_test The-bug-err/30DaysOfCode @@ -302,14 +351,17 @@ TinlokLee/Error-Handing TomCassWindred/errorcheckertests TomNeyland/err-argparse Tomvictor/django-error-pages +TontonTremblay/heatmap_error_pose Tortuginator/ErrorReporter TristanTrim/DjangoItemImportError Tubyhes/hotjar-errorify TwentyDW/Error-Aggregation-Flask-App Uno-Takashi/Universal-Adversarial-Perturbation-for-faster-and-higher-error-rate Upflask/Upflask-error-pages +VSevagen/errBox Vandermode/ERRNet Veerachart/Fisheye_error +Viacheslav1skywalker/Errors_Killer Vikiko/error VorobeY1326/Lab2_Errors Voronenko/errbot-prometheus-alertmanager @@ -321,6 +373,7 @@ Wallis16/Error-Control-Coding WeepingJarl012/ErrorVisualization Weirb/error-correcting-codes Whenning42/error_tracker +Widmark-Kaue/Aeroacoustics-Monopole-Errors WilliamDowns/ModelErrorCalc WilsonYangLiu/errBar WiscEvan/gitcollab_ERR @@ -332,19 +385,26 @@ YaroslavMolchan/lctv YuanYuLin/libgpg-error YureiTheOriginal/ErrorSquad-bomber YuriBittencourt/Error-detection-Algorithms +Zahabsbs/Error-Narrator Zandahlen/exercisesERROR +ZaneRL9/IpreoChatOps Zetten/bazel-generate-workspace-error Zojax/zojax.error +ZyGan1999/Snowball-Errors-and-Probability +a1exlism/claude-code-cmd-fix-thinking-error a4m4/Least-Squared-Error- +a5507203/dual-t-reducing-estimation-error-for-transition-matrix-in-label-noise-learning aafrey/errbot-dockerfile aamirkhanq/strange-error aary/buck-shared-library-error-report abdullahkhawer/aws-failure-error-warning-termination-notification-framework +abduvalimurodullayev1/django_404-not-found-error abendebury/sphinx-error abhit17/ml_algo_err abraverm/err-jenkinsci absent1706/gae-error-reporting-demo achyudh/errol +adinhodovic/django-custom-error-views afdallismen/Django-error-message-displayed-twice afeldman/fac_30ib_error_db aff3ct/error_rate_references @@ -357,6 +417,7 @@ ahmedshuhel/google-error.nvim ahubler/Email-Error-sorting aiddata/agc-error ailsamm/errorInjectionPipeline +airweave-ai/error-monitoring-agent ajaanbaahu/grammar_error_classifier akadirdd/LinearRegression-GradientDescent-MeanSquaredError akutuzov/error_annotation @@ -378,6 +439,7 @@ alstar95/extractErrorLog alvaro-serra/IRL_application_on_ErrP alvinwan/errorsquared amaiellu/ErrorChecker +amirhessam88/Regression-Error-Characteristic-Curve anatoliis/cerberus_error anay97/python-errorcode-generator andersx/errorlearn @@ -397,6 +459,8 @@ anuragrana/Django2-Custom-404-error-page anuragrana/Error-Logging-In-Django anuragrana/Error_Logging_Django apabhishek178/error +apewalkers/PS5-Software-ErrorLookup +apewalkers/PlayStation-5-NOR-ErrorLog appsembler/openedx-error-app aptivate/extract_django_error arekhi/AMS_Error_Modeling_DL @@ -416,7 +480,10 @@ austinfrey/errbot-dockerfile austinhappel/sabot autoterrorbot/FB_tERRORBOT avybornova/error_counter +awasthiabhijeet/Error-Driven-ASR-Personalization +aws-samples/aws-lambda-error-handling-pattern axxia/axxia_errata +ayushgargdroid/Error-Level-Analysis-for-Jpeg b199712/NVMe_Error_Check barath99/TN-CS-ErrorCorrections barecasco/errand @@ -437,6 +504,7 @@ biomembranes/TensorOrderingWithErrorAn bitesofcode/pyramid_errbit blakegall/ErraticBot blue-walkers/error-parser +borgholt/error-align borisbergman/ErrorGenerator braikoff/TrialAndError brandoconnor/err-plugins @@ -451,6 +519,7 @@ brightinteractive/django-debug-error-logging britonad/pylint-errors bromontana/error-control bruno-sm/Sampson-error +buzzer-re/WinError byverone/ErrorLogger caenrigen/gsErrorPropagator cafecco/k-error-linear-complexity @@ -459,14 +528,18 @@ caramethylate/Profanity-Error carljm/django-errorstack carolinux/qgis_error_ellipses cashlink/error-boundary +castorini/touche-error-analysis ccpgames/jsonschema-errorprinter cdeaneGit/catch_xmllint_errors cdtx/django_error_handlers cdumay/cdumay-error +cehinson/ERRANT_ZH cfcooney/Word-Error-Rate cg-tuwien/Quantifying-the-Error-of-Light-Transport-Algorithms chahak13/quantum-error-correction chandler-stevens/Percent-Error +chandu7077/error-detection-in-computer-networks +charinev/unified-error-codes checalov/AliBot cheersyouran/analyst-forecast-errors chencoyote/ErrorPacketAttack @@ -487,12 +560,15 @@ cmac4603/nav_time_error cobhuni/errors_fixer codedu-python/errorfiles collective/Products.TrackConflictErrors +comeonzhj/Errata_byAI_word comjoueur/snake_con_error commit-live-admin/errors coroner4817/ErrorTextClassification corpaul/errorreporter +corticph/error-align cosyman/trial-and-error-python cprohoda/errorhandler +creator-xi/Error-quantified-Conformal-Inference crossoveranx/ErrorRelatedPotential-Text-Prediction crowdynews/stackdriver-error-reporting-python cs294-python/errors @@ -500,21 +576,33 @@ cs91chris/flask_errors_handler csilberste/errorbars csquared/errorbucket ctoth/jumpToError +cwhit-io/error-notifier cynikolai/VOC-Error-Analyzer cyshen/addError_cifar10 czcorpus/proxy-error-docs +daenney/err-repohook danelee2601/ErrorMessageDetecter danie1cohen/docker-errbot danluu/fs-errors +danmcb/auto-error-codes danquixote/PythonErrorDuty darrenyaoyao/OhmyNN_for_ASR_error_on_dialog_system dartrevan/DynamicErrorNetwork datadesk/census-error-analyzer davidnutter/Centos-Errata davido/buck_error_prone_integration +davidstutz/random-bit-error-robustness daylight/sort_error +ddurumboy2197/age-error-exception +ddurumboy2197/error-logging-module +ddurumboy2197/error-stack-traceback +ddurumboy2197/fastapi-error-handler +ddurumboy2197/hydration-error-fix +ddurumboy2197/react-error-fix deanishe/alfred-errnum +debugfanfan/EnglishWordErrorCorrection delfick/delfick_error +dellixx/TransERR derekhendrickx/find-my-flac-errors deusimardamiao/presentation-error devoidheiligenschein/million-song-errythang @@ -601,6 +689,7 @@ fengwangjiang/error-estimators fengwangjiang/errorEstimator fengyu586/ErrP_Detection ferRm/Error404_DataAnalytics_NotFound +fergaletto/PPE-detector-Tiny-YOLOv3-Rasp.erry-PI-and-NCS2 fernandoalzo/err_auto_search fgs22002/real-word-errors finnd/korymbus_sample_case_error @@ -630,10 +719,12 @@ gbin/err-storage-tester gchure/stripplot_error gdeest/repro_link_error ghazi-git/drf-standardized-errors +ghy1228/LDPC_Error_Floor gmlexx/ErrorsDigest gnxn/Linux-Installation-and-Error-Repair-Log gokceuludogan/SpellErrorCorrector google-research-datasets/C4_200M-synthetic-dataset-for-grammatical-error-correction +google-research/runtime-error-prediction googleapis/python-error-reporting gorff/Toric-Code-Correlated-Error-Decoder gpanther/blobstore-error-poc @@ -642,6 +733,7 @@ gregor-b/errcalc gregpoulos/panlex-error-correction greyside/errand-boy grimm004/ErrorCorrectingCodes +gripep/drf-simple-api-errors groupserver/gs.errormesg gsnewmark/ErrorCorrectingCodingAlgorithm gtabak/errorPages @@ -662,6 +754,8 @@ haxsaw/errator hayleethegamer/Error_Temp hclivess/errorseek hcoura/forbes_scrapy_error +hellosaumil/MyErrVisualizer +henryiii/flake8-errmsg higurashi-takuto/errors hillerlab/IterativeErrorCorrection hiroaki-yamamoto/flask-error @@ -676,12 +770,14 @@ hyeonsangjeon/computing-Korean-STT-error-rates hyugithub/bellman_error hzhang-wx/light_errata iamcco/react-error-codes.vim +iamsudip/err-pagerduty ianzapolsky/art_err_day icaiyu/py-errorhelper icedata/error-discovery iceterminal/saveErrorLog igor-pea/Time-Error-Correction ikerib/errolda-api +ikollipara/monadic-error illprogramtheshitoutofyou/error im-shyam/django_error_assist imalic3/python-word-error-rate @@ -694,6 +790,8 @@ isayme/alfred-errno isislab-unisa/syntactical-errors-detection ithype/import-all-error itpir/agc-error +itschenjing/zhixue_errorbook +ivan-borovets/fastapi-error-map j-bennet/cass-err-timeout j0a0m4/redes-projeto-correcao-erros j0r1/ErrUt @@ -747,6 +845,7 @@ jwanglof/flask-errorhandler-sendgrid jwfrizzell/udacity_causes_of_error jwilk/python-syntax-errors jwilksftw/BLS-Work-Error-Finder +jyothish-ram/StackOverflow_error_auto_search k2la/rss-error kahrkunne/Julia-Longina-Balbina-Error kanekomasahiro/error_detection @@ -790,22 +889,28 @@ ktalik/munin-nginx-errors ktdreyer/errata-tool ktdreyer/errata-tool-ansible ktmzsh/err_injection +kuratomiwaysure/GNSS-Position-Error-Estimated-by-Machine-Learning-Techniques-with-Environmental-Information-Input kyeongsoo/multi-path_error_flow_control kylehovey/ERRNO_Picture_Daemon lab-v2/Error-Detection-and-Correction +lafayette96/CVE-Errata-Tool lajanugen/errata_analysis_eecs573 lamdba/error lamdba/error_s1 +larsbratholm/boltzmann_errors lccostajr/VB6_ErrorChecking +lchen1019/ERR-Seg lddubeau/drf_pickling_error leonfrcom/errorcalcs leonfrcom/errorcalcs-beta lewis-od/QuantumErrorCorrection lexkosha/error lhagaman/error_analysis +lhl/hle-gpqa-error-claims life1347/ryu_ofp_error_parser lijenstina/Experiments-with-patch-D791-Displaying-Addon-errors-in-the-UI lijiawenl/code_errorlog +lim-it-err/lane_change_sumo lindamaok899/standard_errors line-mind/error_solver linkdd/errcorrect @@ -814,6 +919,7 @@ liormizr/error_handling_talk liormizr/error_manager litcoderr/Error-Encoding-Network-Tensorflow-Implementation liviafariasampaio/PropagacaoErro +liwenju0/error_text_gen lllucius/spacewalk-errata-loader lmc2179/ErrorDetection loitho/katello-create-errata @@ -822,9 +928,11 @@ lorenmh/drf-error louisdijkstra/error-model-aligner lowlevel86/multiple-variable-trial-and-error lsigithub/lsi_axxia_errata_public +lsqdecodebox/Spelling_Error_Correction lucastheis/errorbars lucianoRM/error_logger_server ludwingperezt/django-error-log-notificator +lugia19/ErrorPatcher luismiguelnarvaez/demoError lukant101/erroresbuenos lukasbentkamp/ErrorPro @@ -860,6 +968,8 @@ mattupstate/pytest-flask-error maximedb/artificial_errors_generation mayflower/err-rasa mbsa-tud/OpenErrorPro +mcao516/Factual-Error-Correction +mcmahon-lab/error_mitigation_vqe mdales/alfred-errno melkamar/pytest-setuppy-err mfergie/errorless @@ -867,7 +977,9 @@ mgrace-greenphire/error-log-parser mhsiddiqui/django-error-report michael-a-jones/Calibrating-error-extrapolation michalwujas/Trac-Symfony-Errors-Plugin +microsoft/simulated-trial-and-error mihaibivol/isbnlib-flask-error-demo +mihainsto/Error-Detecting-Codes mikeleisz/errorAutobot mikeshultz/django-error-pages mikesj-public/mm_with_sampling_error @@ -888,6 +1000,7 @@ mkramer45/UnicodeConversionError_Traxsource mneyapo/Error_Fix mnickey/CSV_ErrorFinder modultechnology/nel_errors +mohammad-rowshan/Error-Coefficient-reduced-Polar-PAC-Codes monishnarendra/Error-Detection-using-CRC-Circuit_16bits monopsony/Cluster-Error moqada/django-js-error-logging @@ -896,6 +1009,7 @@ mr-georgebaker/PyError mridang/django-erroneous mrmiddy/Gconnect-Error mrvladus/Errands +mschubert95/identifying_label_errors_in_od mscrim/LogErrorTest muzlightbeer/php-errata mwerevu/ErrorComp @@ -912,6 +1026,7 @@ negatendo/404error.gallery neonrsa/errorplshelp nerdia/det_errors netdude78/web2py_error_watch +nextixt/Error_func niboshi/python-colorize-errors nick9999/stack_error nicksettje/errs @@ -928,6 +1043,7 @@ norlag/CalculatriceErrAbs not-sham/django_error_assist novareto/uvc.errorlog nsaripalli/passive-aggressive-error-messages +null-none/drf-errors numerodix/django-http-errors nzoschke/errorbucket-django o1i/error_corrections @@ -940,12 +1056,15 @@ olivierilorenzo/classification-error olpossum/circular_error_probable omeomi/PredictionError_analysis omeomi/PredictionError_experiment +omkardarves/fastapi-error-logger onelivesleft/PrettyErrors onwodoh/Search-StackOverFlow-for-Compiler-Errors +orangeduck/JointErrorPropagation orimanabu/rhn_errata oshlern/ErrorCorrectingCode oslovo/error-handlers osu-cass/sdg-python-error-logging +oudmadadi/error-handling owasptu/Error404_SC18 oylbin/error-log-monitor ozymandium/err-prop @@ -956,13 +1075,16 @@ padster/Error-UNet palchikov/Compiler-Error-Assistant pallavi2209/Homophone_error_controller pandahuang/ErrorTypeRecognition +panholt/err-backend-cisco-spark panx27/edl-err-ana paszabo/error_logger patientplatypus/pythonError patorres61/PRG105-errorExceptions +pauld-splunk/aws-splunk-firehose-error-reingest paurosello/errorges pavelfilippi/trial-error pawnesh/webpage-error-checker +pawsengineer/python-word-error-rate peta-okechan/calc-error-detection petebrowne/django-adminactions-forbidden-error peterhogg/ErrorSolve @@ -983,14 +1105,18 @@ pirxthepilot/ninjam-slack-bot pixrl/ErrorCorrectionCodeGui pli01/scalingo-errbot-buildpack pmaigutyak/mp-error-handlers +pocokhc/ErrorDiffusionMethod +polcats/ErrandClassifier potar/collective.error.detector pozorvlak/error_proxy +ppantidis/I-FENN-part2-Error-convergence-and-HPS-of-PINNs pranay414/Error404 prashnani/PerceptualImageError preetiramaraj/mining_hardware_errata presci/errands prismaticd/dj-cloud-error priyabagaria/error-analysis +prusa3d/Prusa-Error-Codes psjyothiprasad/Mining-Special-Data---Error-Correction-and-Performance-Assessment pviniciusm/errc2017 pylola/haiku-errors @@ -1020,6 +1146,7 @@ relife957/ErrorEmail repoze/repoze.errorlog rfw/wsgi_php_errors rhintz42/Learning-Python-fix-errors +rhugonnet/dem_error_study rick1611/err6fgb-repo riebecj/Combining_Error_Ellipses rigley007/err_surface_comparison @@ -1031,10 +1158,13 @@ riteshnaik/Error-detection-and-correction-dealing-with-homophone-confusion riyapal/Characterising-Parser-Errors rmorgan10/error_cat rnatella/errordumper +robempire/ErrorBot robin-libert/projet_theorie_erreurs robodair/yapsy_multiprocess_pool_import_error robojase/errbot-chat-points +rodrigogiraoserrao/error-links rohanbanerjee/error101 +rohithreddy0087/error-control-codes-wireless-channels romanhaa/barcodeErrorProducer ronnycorral/APILogErrorCheck rotom/errata @@ -1050,6 +1180,7 @@ sabrinadowla14/flaskError sagivnet/Error-Correcting salcedo/errorpages samueldg/errbot-hipchat-docker +samueljsb/silence-lint-error santanu-tripathy/error-ellipse sarahwalters/error-coding sarathchandare/Rest-Error-Validation-Python @@ -1087,8 +1218,10 @@ simone/erre simonmelouah/errands simonrw/NGTS-error-contributions singhbhai/cap-read-errors +sirius8050/Expected-Calibration-Error slerpy/erratic smangul1/error.correction.benchmarking +socialfoundations/error-parity socialplanning/SupervisorErrorMiddleware sodaxiaoyao/ErrorSet softdevteam/error_recovery_experiment @@ -1099,11 +1232,13 @@ soramichi/image_error_injector sorensen/django-client-errors sot/attitude_error_mon soukron/errata2cv +southwest416/ERR-Generator sovamakarosh/Prtg_Err spacemanspiff2007/GetOpenhabErrors sparachi1011/Erric sparkstudios/Sentence-err sprockets/sprockets.mixins.json_error +sprytnyk/pylint-errors srgzyq/error-log-monitor srishti88/errors steeams/Django_error @@ -1115,6 +1250,7 @@ stevenjowens/erras stretchmaniac/ErrorPropagation stretchmaniac/error-propagation sudarshang/jedi_import_error +sudo-LuSer/Pi-10--15-ERROR-APPROXIMA suetAndTie/ClarkeErrorGrid sunnysunita/exception-and-error-handling surfer1036/error @@ -1127,21 +1263,25 @@ t-kenji/errbot-moogle takumak/err_prop talionet/StudentsErrorPatternAnalysis tbec/ErrorControlCoding +teamtee/LLM-ASR-Error-Correction techinologic/python_error_catching ted-udale/ErrorEmailMonitor tejvi-m/minErrorRateClassifier theavey/practical_percent_error +thebmo/bmodjangotest thejohnfreeman/multi_error thinson/balance-error-rate-calculation-for-shadow-detection thmason24/errorState_KF thompcinnamon/practical_percent_error thundercraker/Python-Errata tianlinyang/grammatical-error-correction +tianxusky/Code-for-Error-Bounds-of-Imitating-Policies-and-Environments timwaters/gdal_rasterize_error tjerwinchen/IDBServerErrorReporter tohzijie/corrrect_error tolumide-ng/ErrorSwag-PyFlask tomarrell/BankErrorChecking +tomblench/ofhave tomguy04/SqlConnectionError tomyedwab/error-monitor-db topcatthomas/errorHelp @@ -1156,6 +1296,7 @@ tsussi/cloud-regime-error-metric tudelft3d/Error3Dcity twhunt/backwards_error ufal/wiki-error-corpus +ufukasia/Adaptive-Covariance-and-Quaternion-Focused-Hybrid-Error-State-EKF-UKF-for-Visual-Inertial-Odometry unclebob7/forward-error-correction-with-hamming-code uniquezhiyuan/RadrErrorDiagnose uskysd/openpyxl-errorbar @@ -1168,12 +1309,15 @@ venuslikestolearn/ErrorExtract vieiramanoel/ErrorCalc vieirin/ErrorCalc vikipatel1995/error_handling +vitorio/snarky-screening vivekgrover1/errbot vivian8910/Grammatical-Error-Identification-for-Learners-of-Chinese vlt/python_error_handling vmaffei/PCR_error vmdowney/oclc-error-report-tools +voxel51/reconstruction-error-ratios vutny/errbot-slack-st2 +wacl-york/quant-air-pollution-measurement-errors wafemi999/Py_work_ErricMathes wangkaiX/errCode wangmz15/Chinese-Error-Diagnosis-with-ERNIE @@ -1183,20 +1327,27 @@ wchnicholas/NGSTagErrCorrect webpigeon/docker-errbot weijlander/ScaleErrors willgeorgejr/system-32-error +william-Dic/ErrGAN williamdparker/mean-error willyrv/msmc-phasing-err winecat/errCode wittonwj/PrettyErrors wkentaur/err-ne wkentaur/graph-err +wmt-conference/ErrorSpanAnnotation wooyek/django-error-views wpp1983/hlsl-error wrldwzrd89/lib-python2-error-logger wrldwzrd89/lib-python3-error-logger wtanaka/google-app-engine-django-errors xDavidos/Deep-Q-learning-applied-to-quantum-error-correction +xONEIROS/Airchain-Error-Fixer xda22-Ding/Error-Correcting-Codes- +xi/lunchbot +xiaozhejiya/error_correction xjr7670/error_count +xueyouluo/wiki-error-extract +xzajyjs/SpringBoot-whitelabel-error-rce-EXP yabolu/error_log_show yasutakaGoto/gateway-err-alarm yasutakaGoto/lambda-err-alarm @@ -1206,6 +1357,7 @@ yixikkjkj/pylintErrors yjmade/django-celery-errorlog yjmade/django-errorlog yllar/plugin.video.err.ee +yllar/plugin.video.jupiter.err.ee yokilaarora/Grammatical-Error-Correction yokotsushima/cloud-regime-error-metric yomgui1/delta_error @@ -1241,6 +1393,7 @@ zhjingde/error- zhoushuoqi/monkey_errorlog_analysis zikiki/news_sentiment_ERR zixuan75/error-3040-project-description +zoni/err-mailwatch zopefoundation/Products.SiteErrorLog zopefoundation/grokcore.error zopefoundation/grokcore.errorview @@ -1248,45 +1401,3 @@ zopefoundation/zope.app.error zopefoundation/zope.error zopefoundation/zope.errorview zxdswgnda/getErrImgPair -TW-NLP/ChineseErrorCorrector -microsoft/simulated-trial-and-error -sprytnyk/pylint-errors -NJU-PCALab/ERR -rodrigogiraoserrao/error-links -voxel51/reconstruction-error-ratios -Aolin-MIR/soft-masked-bert-for-spelling-error-correction -danmcb/auto-error-codes -sirius8050/Expected-Calibration-Error -comeonzhj/Errata_byAI_word -samueljsb/silence-lint-error -iamsudip/err-pagerduty -TIMER-err/fuckewt360 -polcats/ErrandClassifier -robempire/ErrorBot -hellosaumil/MyErrVisualizer -Hamed233/ErrorTrace-Pro -Coldmist-Lu/ErrorAnalysis_NLGEvaluation -PowerSystem2024/Error404TercerSemestre -jyothish-ram/StackOverflow_error_auto_search -ayushgargdroid/Error-Level-Analysis-for-Jpeg -HQSquantumsimulations/non-iid-error-correction-published -chandu7077/error-detection-in-computer-networks -rohithreddy0087/error-control-codes-wireless-channels -sudo-LuSer/Pi-10--15-ERROR-APPROXIMA -S-kewen/lidar-point-cloud-error-concealment -mschubert95/identifying_label_errors_in_od -Iankulani/Error-Based-SQL-Injection-Detector -oudmadadi/error-handling -larsbratholm/boltzmann_errors -Peder2911/pac_errors -GoeSoft/Error-Validate -MudrakshnMcShaw/Executor_Error -cwhit-io/error-notifier -Kiln707/Flask_Error -Viacheslav1skywalker/Errors_Killer -nextixt/Error_func -thebmo/bmodjangotest -tomblench/ofhave -vitorio/snarky-screening -xi/lunchbot -ZaneRL9/IpreoChatOps diff --git a/tools/gen_home.py b/tools/gen_home.py index 5bcf9fb8e..96c6cbdbf 100755 --- a/tools/gen_home.py +++ b/tools/gen_home.py @@ -5,7 +5,7 @@ template = Template(open("plugins.md").read()) -blacklisted = [repo.strip() for repo in open("blacklisted.txt", "r").readlines()] +blocklist = [repo.strip() for repo in open("blocklist.txt", "r").readlines()] PREFIX_LEN = len("https://github.com/") @@ -13,13 +13,13 @@ repos = json.load(p) # Removes the weird forks of errbot itself and - # blacklisted repos + # blocklist repos filtered_plugins = [] for repo, plugins in repos.items(): for name, plugin in plugins.items(): if plugin["path"].startswith("errbot/builtins"): continue - if plugin["repo"][PREFIX_LEN:] in blacklisted: + if plugin["repo"][PREFIX_LEN:] in blocklist: continue filtered_plugins.append(plugin) diff --git a/tools/plugin-gen.py b/tools/plugin-gen.py index f739db8cc..db33a724b 100755 --- a/tools/plugin-gen.py +++ b/tools/plugin-gen.py @@ -8,7 +8,7 @@ import sys import time from datetime import datetime -from typing import Any, Dict, List, Optional, Set +from typing import Any, Dict, Optional, Set import requests from requests.auth import HTTPBasicAuth @@ -32,7 +32,7 @@ def __init__(self, tools_dir: pathlib.Path): self.tools_dir = tools_dir self.repos_json_path = tools_dir / "repos.json" self.processed_path = tools_dir / "processed_repos.json" - self.blacklisted_path = tools_dir / "blacklisted.txt" + self.blocklist_path = tools_dir / "blocklist.txt" self.extras_path = tools_dir / "extras.txt" self.token_path = tools_dir / "token" @@ -43,13 +43,13 @@ def __init__(self, tools_dir: pathlib.Path): # State management self.plugins = self._load_json(self.repos_json_path, {}) self.processed_repos = set(self._load_json(self.processed_path, [])) - self.blacklisted = self._load_blacklisted() + self.blocklist = self._load_blocklist() # Cache for repo metadata to avoid redundant requests self.repo_metadata_cache = {} log.info(f"Loaded {len(self.plugins)} repositories from {self.repos_json_path}") - log.info(f"Loaded {len(self.blacklisted)} blacklisted repositories") + log.info(f"Loaded {len(self.blocklist)} blocklist repositories") self.interrupted = False signal.signal(signal.SIGINT, self._handle_interrupt) @@ -95,10 +95,10 @@ def _load_json(self, path: pathlib.Path, default: Any) -> Any: log.error(f"Failed to load {path}: {e}") return default - def _load_blacklisted(self) -> Set[str]: - """Load blacklisted repositories from file.""" - if self.blacklisted_path.exists(): - with open(self.blacklisted_path, "r") as f: + def _load_blocklist(self) -> Set[str]: + """Load blocklist repositories from file.""" + if self.blocklist_path.exists(): + with open(self.blocklist_path, "r") as f: return {line.strip() for line in f if line.strip()} return set() @@ -115,15 +115,15 @@ def _save_state(self): except Exception as e: log.error(f"Failed to save state: {e}") - def add_blacklisted(self, repo_name: str): - """Add a repository to the blacklist and persist it.""" - if repo_name not in self.blacklisted: - self.blacklisted.add(repo_name) + def add_to_blocklist(self, repo_name: str): + """Add a repository to the blocklist and persist it.""" + if repo_name not in self.blocklist: + self.blocklist.add(repo_name) try: - with open(self.blacklisted_path, "a") as f: + with open(self.blocklist_path, "a") as f: f.write(repo_name + "\n") except Exception as e: - log.error(f"Failed to update blacklist file: {e}") + log.error(f"Failed to update blocklist file: {e}") def rate_limit(self, resp: requests.Response): """Wait if GitHub API rate limit is reached.""" @@ -189,7 +189,7 @@ def process_plug_file(self, item: Dict[str, Any], progress_info: str = ""): """Process a single .plug file found in search.""" repo_name = item["repository"]["full_name"] - if repo_name in self.blacklisted: + if repo_name in self.blocklist: return log.info(f"{progress_info} Processing {item['path']} in {repo_name}")