prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Add 3.8 support to setup.py
  We've been running CI against 3.8 for a while now, we should update the metadata in `setup.py` to explicitly state we support 3.8.
  
  We should also update the [support table](https://github.com/opsdroid/opsdroid/blob/master/docs/maintaining/supported-python-versions.md) to say we support 3.8.
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `setup.py`
  Content:
  ```
  1 #!/usr/bin/env python3
  2 import os
  3 from setuptools import setup, find_packages
  4 from setuptools.command.build_py import build_py
  5 from setuptools.command.sdist import sdist
  6 from setuptools.command.develop import develop
  7 import versioneer
  8 
  9 PACKAGE_NAME = "opsdroid"
  10 HERE = os.path.abspath(os.path.dirname(__file__))
  11 README = open(os.path.join(HERE, "README.md"), encoding="utf8").read()
  12 
  13 PACKAGES = find_packages(
  14     exclude=["tests", "tests.*", "modules", "modules.*", "docs", "docs.*"]
  15 )
  16 
  17 
  18 # For now we simply define the install_requires based on the contents
  19 # of requirements.txt. In the future, install_requires may become much
  20 # looser than the (automatically) resolved requirements.txt.
  21 with open(os.path.join(HERE, "requirements.txt"), "r") as fh:
  22     REQUIRES = [line.strip() for line in fh]
  23 
  24 
  25 class Develop(develop):
  26     """Custom `develop` command to always build mo files on install -e."""
  27 
  28     def run(self):
  29         self.run_command("compile_catalog")
  30         develop.run(self)  # old style class
  31 
  32 
  33 class BuildPy(build_py):
  34     """Custom `build_py` command to always build mo files for wheels."""
  35 
  36     def run(self):
  37         self.run_command("compile_catalog")
  38         build_py.run(self)  # old style class
  39 
  40 
  41 class Sdist(sdist):
  42     """Custom `sdist` command to ensure that mo files are always created."""
  43 
  44     def run(self):
  45         self.run_command("compile_catalog")
  46         sdist.run(self)  # old style class
  47 
  48 
  49 setup(
  50     name=PACKAGE_NAME,
  51     version=versioneer.get_version(),
  52     license="Apache License 2.0",
  53     url="https://opsdroid.github.io/",
  54     download_url="https://github.com/opsdroid/opsdroid/releases",
  55     author="Jacob Tomlinson",
  56     author_email="jacob@tom.linson.uk",
  57     description="An open source ChatOps bot framework.",
  58     long_description=README,
  59     long_description_content_type="text/markdown",
  60     packages=PACKAGES,
  61     include_package_data=True,
  62     zip_safe=False,
  63     platforms="any",
  64     classifiers=[
  65         "Development Status :: 4 - Beta",
  66         "Environment :: Console",
  67         "Framework :: AsyncIO",
  68         "Intended Audience :: Developers",
  69         "Intended Audience :: System Administrators",
  70         "Intended Audience :: Information Technology",
  71         "License :: OSI Approved :: Apache Software License",
  72         "Programming Language :: Python",
  73         "Programming Language :: Python :: 3",
  74         "Programming Language :: Python :: 3 :: Only",
  75         "Programming Language :: Python :: 3.6",
  76         "Programming Language :: Python :: 3.7",
  77         "Topic :: Communications :: Chat",
  78         "Topic :: Scientific/Engineering :: Artificial Intelligence",
  79         "Topic :: Software Development :: Libraries :: Python Modules",
  80     ],
  81     install_requires=REQUIRES,
  82     test_suite="tests",
  83     keywords=[
  84         "bot",
  85         "bot-framework",
  86         "opsdroid",
  87         "botkit",
  88         "python3",
  89         "asyncio",
  90         "chatops",
  91         "devops",
  92         "nlu",
  93     ],
  94     setup_requires=["Babel"],
  95     cmdclass=versioneer.get_cmdclass(
  96         {"sdist": Sdist, "build_py": BuildPy, "develop": Develop}
  97     ),
  98     entry_points={"console_scripts": ["opsdroid = opsdroid.cli:cli"]},
  99 )
  100
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/setup.py b/setup.py
  --- a/setup.py
  +++ b/setup.py
  @@ -74,6 +74,7 @@
           "Programming Language :: Python :: 3 :: Only",
           "Programming Language :: Python :: 3.6",
           "Programming Language :: Python :: 3.7",
  +        "Programming Language :: Python :: 3.8",
           "Topic :: Communications :: Chat",
           "Topic :: Scientific/Engineering :: Artificial Intelligence",
           "Topic :: Software Development :: Libraries :: Python Modules",
  
verification_info: {"golden_diff": "diff --git a/setup.py b/setup.py\n--- a/setup.py\n+++ b/setup.py\n@@ -74,6 +74,7 @@\n         \"Programming Language :: Python :: 3 :: Only\",\n         \"Programming Language :: Python :: 3.6\",\n         \"Programming Language :: Python :: 3.7\",\n+        \"Programming Language :: Python :: 3.8\",\n         \"Topic :: Communications :: Chat\",\n         \"Topic :: Scientific/Engineering :: Artificial Intelligence\",\n         \"Topic :: Software Development :: Libraries :: Python Modules\",\n", "issue": "Add 3.8 support to setup.py\nWe've been running CI against 3.8 for a while now, we should update the metadata in `setup.py` to explicitly state we support 3.8.\r\n\r\nWe should also update the [support table](https://github.com/opsdroid/opsdroid/blob/master/docs/maintaining/supported-python-versions.md) to say we support 3.8.\n", "before_files": [{"content": "#!/usr/bin/env python3\nimport os\nfrom setuptools import setup, find_packages\nfrom setuptools.command.build_py import build_py\nfrom setuptools.command.sdist import sdist\nfrom setuptools.command.develop import develop\nimport versioneer\n\nPACKAGE_NAME = \"opsdroid\"\nHERE = os.path.abspath(os.path.dirname(__file__))\nREADME = open(os.path.join(HERE, \"README.md\"), encoding=\"utf8\").read()\n\nPACKAGES = find_packages(\n    exclude=[\"tests\", \"tests.*\", \"modules\", \"modules.*\", \"docs\", \"docs.*\"]\n)\n\n\n# For now we simply define the install_requires based on the contents\n# of requirements.txt. In the future, install_requires may become much\n# looser than the (automatically) resolved requirements.txt.\nwith open(os.path.join(HERE, \"requirements.txt\"), \"r\") as fh:\n    REQUIRES = [line.strip() for line in fh]\n\n\nclass Develop(develop):\n    \"\"\"Custom `develop` command to always build mo files on install -e.\"\"\"\n\n    def run(self):\n        self.run_command(\"compile_catalog\")\n        develop.run(self)  # old style class\n\n\nclass BuildPy(build_py):\n    \"\"\"Custom `build_py` command to always build mo files for wheels.\"\"\"\n\n    def run(self):\n        self.run_command(\"compile_catalog\")\n        build_py.run(self)  # old style class\n\n\nclass Sdist(sdist):\n    \"\"\"Custom `sdist` command to ensure that mo files are always created.\"\"\"\n\n    def run(self):\n        self.run_command(\"compile_catalog\")\n        sdist.run(self)  # old style class\n\n\nsetup(\n    name=PACKAGE_NAME,\n    version=versioneer.get_version(),\n    license=\"Apache License 2.0\",\n    url=\"https://opsdroid.github.io/\",\n    download_url=\"https://github.com/opsdroid/opsdroid/releases\",\n    author=\"Jacob Tomlinson\",\n    author_email=\"jacob@tom.linson.uk\",\n    description=\"An open source ChatOps bot framework.\",\n    long_description=README,\n    long_description_content_type=\"text/markdown\",\n    packages=PACKAGES,\n    include_package_data=True,\n    zip_safe=False,\n    platforms=\"any\",\n    classifiers=[\n        \"Development Status :: 4 - Beta\",\n        \"Environment :: Console\",\n        \"Framework :: AsyncIO\",\n        \"Intended Audience :: Developers\",\n        \"Intended Audience :: System Administrators\",\n        \"Intended Audience :: Information Technology\",\n        \"License :: OSI Approved :: Apache Software License\",\n        \"Programming Language :: Python\",\n        \"Programming Language :: Python :: 3\",\n        \"Programming Language :: Python :: 3 :: Only\",\n        \"Programming Language :: Python :: 3.6\",\n        \"Programming Language :: Python :: 3.7\",\n        \"Topic :: Communications :: Chat\",\n        \"Topic :: Scientific/Engineering :: Artificial Intelligence\",\n        \"Topic :: Software Development :: Libraries :: Python Modules\",\n    ],\n    install_requires=REQUIRES,\n    test_suite=\"tests\",\n    keywords=[\n        \"bot\",\n        \"bot-framework\",\n        \"opsdroid\",\n        \"botkit\",\n        \"python3\",\n        \"asyncio\",\n        \"chatops\",\n        \"devops\",\n        \"nlu\",\n    ],\n    setup_requires=[\"Babel\"],\n    cmdclass=versioneer.get_cmdclass(\n        {\"sdist\": Sdist, \"build_py\": BuildPy, \"develop\": Develop}\n    ),\n    entry_points={\"console_scripts\": [\"opsdroid = opsdroid.cli:cli\"]},\n)\n", "path": "setup.py"}], "after_files": [{"content": "#!/usr/bin/env python3\nimport os\nfrom setuptools import setup, find_packages\nfrom setuptools.command.build_py import build_py\nfrom setuptools.command.sdist import sdist\nfrom setuptools.command.develop import develop\nimport versioneer\n\nPACKAGE_NAME = \"opsdroid\"\nHERE = os.path.abspath(os.path.dirname(__file__))\nREADME = open(os.path.join(HERE, \"README.md\"), encoding=\"utf8\").read()\n\nPACKAGES = find_packages(\n    exclude=[\"tests\", \"tests.*\", \"modules\", \"modules.*\", \"docs\", \"docs.*\"]\n)\n\n\n# For now we simply define the install_requires based on the contents\n# of requirements.txt. In the future, install_requires may become much\n# looser than the (automatically) resolved requirements.txt.\nwith open(os.path.join(HERE, \"requirements.txt\"), \"r\") as fh:\n    REQUIRES = [line.strip() for line in fh]\n\n\nclass Develop(develop):\n    \"\"\"Custom `develop` command to always build mo files on install -e.\"\"\"\n\n    def run(self):\n        self.run_command(\"compile_catalog\")\n        develop.run(self)  # old style class\n\n\nclass BuildPy(build_py):\n    \"\"\"Custom `build_py` command to always build mo files for wheels.\"\"\"\n\n    def run(self):\n        self.run_command(\"compile_catalog\")\n        build_py.run(self)  # old style class\n\n\nclass Sdist(sdist):\n    \"\"\"Custom `sdist` command to ensure that mo files are always created.\"\"\"\n\n    def run(self):\n        self.run_command(\"compile_catalog\")\n        sdist.run(self)  # old style class\n\n\nsetup(\n    name=PACKAGE_NAME,\n    version=versioneer.get_version(),\n    license=\"Apache License 2.0\",\n    url=\"https://opsdroid.github.io/\",\n    download_url=\"https://github.com/opsdroid/opsdroid/releases\",\n    author=\"Jacob Tomlinson\",\n    author_email=\"jacob@tom.linson.uk\",\n    description=\"An open source ChatOps bot framework.\",\n    long_description=README,\n    long_description_content_type=\"text/markdown\",\n    packages=PACKAGES,\n    include_package_data=True,\n    zip_safe=False,\n    platforms=\"any\",\n    classifiers=[\n        \"Development Status :: 4 - Beta\",\n        \"Environment :: Console\",\n        \"Framework :: AsyncIO\",\n        \"Intended Audience :: Developers\",\n        \"Intended Audience :: System Administrators\",\n        \"Intended Audience :: Information Technology\",\n        \"License :: OSI Approved :: Apache Software License\",\n        \"Programming Language :: Python\",\n        \"Programming Language :: Python :: 3\",\n        \"Programming Language :: Python :: 3 :: Only\",\n        \"Programming Language :: Python :: 3.6\",\n        \"Programming Language :: Python :: 3.7\",\n        \"Programming Language :: Python :: 3.8\",\n        \"Topic :: Communications :: Chat\",\n        \"Topic :: Scientific/Engineering :: Artificial Intelligence\",\n        \"Topic :: Software Development :: Libraries :: Python Modules\",\n    ],\n    install_requires=REQUIRES,\n    test_suite=\"tests\",\n    keywords=[\n        \"bot\",\n        \"bot-framework\",\n        \"opsdroid\",\n        \"botkit\",\n        \"python3\",\n        \"asyncio\",\n        \"chatops\",\n        \"devops\",\n        \"nlu\",\n    ],\n    setup_requires=[\"Babel\"],\n    cmdclass=versioneer.get_cmdclass(\n        {\"sdist\": Sdist, \"build_py\": BuildPy, \"develop\": Develop}\n    ),\n    entry_points={\"console_scripts\": [\"opsdroid = opsdroid.cli:cli\"]},\n)\n", "path": "setup.py"}]}