diff --git a/changelog.d/downloader/2827.bugfix.rst b/changelog.d/downloader/2827.bugfix.rst new file mode 100644 index 00000000000..98c6b940d34 --- /dev/null +++ b/changelog.d/downloader/2827.bugfix.rst @@ -0,0 +1 @@ +Repo names can now only contain the characters listed in the help text (A-Z, 0-9, underscores, and hyphens). diff --git a/redbot/cogs/downloader/downloader.py b/redbot/cogs/downloader/downloader.py index b59cb4be2c0..a7f85074c68 100644 --- a/redbot/cogs/downloader/downloader.py +++ b/redbot/cogs/downloader/downloader.py @@ -1,6 +1,7 @@ import asyncio import contextlib import os +import re import shutil import sys from pathlib import Path @@ -222,12 +223,17 @@ async def repo(self, ctx): async def _repo_add(self, ctx, name: str, repo_url: str, branch: str = None): """Add a new repo. - The name can only contain characters A-z, numbers and underscores. + Repo names can only contain characters A-z, numbers, underscores, and hyphens. The branch will be the default branch if not specified. """ agreed = await do_install_agreement(ctx) if not agreed: return + if re.match("^[a-zA-Z0-9_\-]*$", name) is None: + await ctx.send( + _("Repo names can only contain characters A-z, numbers, underscores, and hyphens.") + ) + return try: # noinspection PyTypeChecker repo = await self._repo_manager.add_repo(name=name, url=repo_url, branch=branch) @@ -241,6 +247,12 @@ async def _repo_add(self, ctx, name: str, repo_url: str, branch: str = None): branch, exc_info=err, ) + except OSError: + await ctx.send( + _( + "Something went wrong trying to add that repo. Your repo name might have an invalid character." + ) + ) else: await ctx.send(_("Repo `{name}` successfully added.").format(name=name)) if repo.install_msg is not None: