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()

```

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",

{"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"}]}