We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Goodgame plugin not worked.
<!--
Thanks for reporting a plugin issue!
USE THE TEMPLATE. Otherwise your plugin issue may be rejected.

First, see the contribution guidelines:
https://github.com/streamlink/streamlink/blob/master/CONTRIBUTING.md#contributing-to-streamlink

Also check the list of open and closed plugin issues:
https://github.com/streamlink/streamlink/issues?q=is%3Aissue+label%3A%22plugin+issue%22

Please see the text preview to avoid unnecessary formatting errors.
-->


## Plugin Issue

<!-- Replace [ ] with [x] in order to check the box -->
- [x] This is a plugin issue and I have read the contribution guidelines.


### Description

<!-- Explain the plugin issue as thoroughly as you can. -->
It looks like the plugin can no longer open streams.

### Reproduction steps / Explicit stream URLs to test
https://goodgame.ru/channel/Miker/#autoplay
<!-- How can we reproduce this? Please note the exact steps below using the list format supplied. If you need more steps please add them. -->

1. ...
2. ...
3. ...


### Log output

<!--
TEXT LOG OUTPUT IS REQUIRED for a plugin issue!
Use the `--loglevel debug` parameter and avoid using parameters which suppress log output.
https://streamlink.github.io/cli.html#cmdoption-l

Make sure to **remove usernames and passwords**
You can copy the output to https://gist.github.com/ or paste it below.
-->

```
REPLACE THIS TEXT WITH THE LOG OUTPUT
```
c:\>streamlink --loglevel debug https://goodgame.ru/channel/Miker/#autoplay best
[cli][debug] OS:         Windows 7
[cli][debug] Python:     3.6.6
[cli][debug] Streamlink: 1.1.1
[cli][debug] Requests(2.21.0), Socks(1.6.7), Websocket(0.56.0)
[cli][info] Found matching plugin goodgame for URL https://goodgame.ru/channel/Miker/#autoplay
Traceback (most recent call last):
  File "runpy.py", line 193, in _run_module_as_main
  File "runpy.py", line 85, in _run_code
  File "C:\Program Files (x86)\Streamlink\bin\streamlink.exe\__main__.py", line 18, in <module>
  File "C:\Program Files (x86)\Streamlink\pkgs\streamlink_cli\main.py", line 1033, in main
    handle_url()
  File "C:\Program Files (x86)\Streamlink\pkgs\streamlink_cli\main.py", line 577, in handle_url
    streams = fetch_streams(plugin)
  File "C:\Program Files (x86)\Streamlink\pkgs\streamlink_cli\main.py", line 457, in fetch_streams
    sorting_excludes=args.stream_sorting_excludes)
  File "C:\Program Files (x86)\Streamlink\pkgs\streamlink\plugin\plugin.py", line 317, in streams
    ostreams = self._get_streams()
  File "C:\Program Files (x86)\Streamlink\pkgs\streamlink\plugins\goodgame.py", line 49, in _get_str
eams
    **channel_info)
  File "logging\__init__.py", line 1295, in debug
TypeError: _log() got an unexpected keyword argument 'id'

### Additional comments, screenshots, etc.



[Love Streamlink? Please consider supporting our collective. Thanks!](https://opencollective.com/streamlink/donate)


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `src/streamlink/plugins/goodgame.py`
Content:
```
1 import re
2 
3 from streamlink.plugin import Plugin
4 from streamlink.stream import HLSStream
5 from streamlink.utils import parse_json
6 
7 HLS_URL_FORMAT = "https://hls.goodgame.ru/hls/{0}{1}.m3u8"
8 QUALITIES = {
9     "1080p": "",
10     "720p": "_720",
11     "480p": "_480",
12     "240p": "_240"
13 }
14 
15 _url_re = re.compile(r"https?://(?:www\.)?goodgame.ru/channel/(?P<user>[^/]+)")
16 _apidata_re = re.compile(r'''(?P<quote>["']?)channel(?P=quote)\s*:\s*(?P<data>{.*?})\s*,''')
17 _ddos_re = re.compile(r'document.cookie="(__DDOS_[^;]+)')
18 
19 
20 class GoodGame(Plugin):
21     @classmethod
22     def can_handle_url(cls, url):
23         return _url_re.match(url)
24 
25     def _check_stream(self, url):
26         res = self.session.http.get(url, acceptable_status=(200, 404))
27         if res.status_code == 200:
28             return True
29 
30     def _get_streams(self):
31         headers = {
32             "Referer": self.url
33         }
34         res = self.session.http.get(self.url, headers=headers)
35 
36         match = _ddos_re.search(res.text)
37         if match:
38             self.logger.debug("Anti-DDOS bypass...")
39             headers["Cookie"] = match.group(1)
40             res = self.session.http.get(self.url, headers=headers)
41 
42         match = _apidata_re.search(res.text)
43         channel_info = match and parse_json(match.group("data"))
44         if not channel_info:
45             self.logger.error("Could not find channel info")
46             return
47 
48         self.logger.debug("Found channel info: channelkey={channelkey} pid={streamkey} online={status}",
49                           **channel_info)
50         if not channel_info['status']:
51             self.logger.debug("Channel appears to be offline")
52 
53         streams = {}
54         for name, url_suffix in QUALITIES.items():
55             url = HLS_URL_FORMAT.format(channel_info['streamkey'], url_suffix)
56             if not self._check_stream(url):
57                 continue
58 
59             streams[name] = HLSStream(self.session, url)
60 
61         return streams
62 
63 
64 __plugin__ = GoodGame
65
```
--- 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/src/streamlink/plugins/goodgame.py b/src/streamlink/plugins/goodgame.py
--- a/src/streamlink/plugins/goodgame.py
+++ b/src/streamlink/plugins/goodgame.py
@@ -1,9 +1,12 @@
 import re
+import logging
 
 from streamlink.plugin import Plugin
 from streamlink.stream import HLSStream
 from streamlink.utils import parse_json
 
+log = logging.getLogger(__name__)
+
 HLS_URL_FORMAT = "https://hls.goodgame.ru/hls/{0}{1}.m3u8"
 QUALITIES = {
     "1080p": "",
@@ -35,7 +38,7 @@
 
         match = _ddos_re.search(res.text)
         if match:
-            self.logger.debug("Anti-DDOS bypass...")
+            log.debug("Anti-DDOS bypass...")
             headers["Cookie"] = match.group(1)
             res = self.session.http.get(self.url, headers=headers)
 
@@ -45,10 +48,9 @@
             self.logger.error("Could not find channel info")
             return
 
-        self.logger.debug("Found channel info: channelkey={channelkey} pid={streamkey} online={status}",
-                          **channel_info)
+        log.debug("Found channel info: id={id} channelkey={channelkey} pid={streamkey} online={status}".format(**channel_info))
         if not channel_info['status']:
-            self.logger.debug("Channel appears to be offline")
+            log.debug("Channel appears to be offline")
 
         streams = {}
         for name, url_suffix in QUALITIES.items():

{"golden_diff": "diff --git a/src/streamlink/plugins/goodgame.py b/src/streamlink/plugins/goodgame.py\n--- a/src/streamlink/plugins/goodgame.py\n+++ b/src/streamlink/plugins/goodgame.py\n@@ -1,9 +1,12 @@\n import re\n+import logging\n \n from streamlink.plugin import Plugin\n from streamlink.stream import HLSStream\n from streamlink.utils import parse_json\n \n+log = logging.getLogger(__name__)\n+\n HLS_URL_FORMAT = \"https://hls.goodgame.ru/hls/{0}{1}.m3u8\"\n QUALITIES = {\n     \"1080p\": \"\",\n@@ -35,7 +38,7 @@\n \n         match = _ddos_re.search(res.text)\n         if match:\n-            self.logger.debug(\"Anti-DDOS bypass...\")\n+            log.debug(\"Anti-DDOS bypass...\")\n             headers[\"Cookie\"] = match.group(1)\n             res = self.session.http.get(self.url, headers=headers)\n \n@@ -45,10 +48,9 @@\n             self.logger.error(\"Could not find channel info\")\n             return\n \n-        self.logger.debug(\"Found channel info: channelkey={channelkey} pid={streamkey} online={status}\",\n-                          **channel_info)\n+        log.debug(\"Found channel info: id={id} channelkey={channelkey} pid={streamkey} online={status}\".format(**channel_info))\n         if not channel_info['status']:\n-            self.logger.debug(\"Channel appears to be offline\")\n+            log.debug(\"Channel appears to be offline\")\n \n         streams = {}\n         for name, url_suffix in QUALITIES.items():\n", "issue": "Goodgame plugin not worked.\n<!--\r\nThanks for reporting a plugin issue!\r\nUSE THE TEMPLATE. Otherwise your plugin issue may be rejected.\r\n\r\nFirst, see the contribution guidelines:\r\nhttps://github.com/streamlink/streamlink/blob/master/CONTRIBUTING.md#contributing-to-streamlink\r\n\r\nAlso check the list of open and closed plugin issues:\r\nhttps://github.com/streamlink/streamlink/issues?q=is%3Aissue+label%3A%22plugin+issue%22\r\n\r\nPlease see the text preview to avoid unnecessary formatting errors.\r\n-->\r\n\r\n\r\n## Plugin Issue\r\n\r\n<!-- Replace [ ] with [x] in order to check the box -->\r\n- [x] This is a plugin issue and I have read the contribution guidelines.\r\n\r\n\r\n### Description\r\n\r\n<!-- Explain the plugin issue as thoroughly as you can. -->\r\nIt looks like the plugin can no longer open streams.\r\n\r\n### Reproduction steps / Explicit stream URLs to test\r\nhttps://goodgame.ru/channel/Miker/#autoplay\r\n<!-- How can we reproduce this? Please note the exact steps below using the list format supplied. If you need more steps please add them. -->\r\n\r\n1. ...\r\n2. ...\r\n3. ...\r\n\r\n\r\n### Log output\r\n\r\n<!--\r\nTEXT LOG OUTPUT IS REQUIRED for a plugin issue!\r\nUse the `--loglevel debug` parameter and avoid using parameters which suppress log output.\r\nhttps://streamlink.github.io/cli.html#cmdoption-l\r\n\r\nMake sure to **remove usernames and passwords**\r\nYou can copy the output to https://gist.github.com/ or paste it below.\r\n-->\r\n\r\n```\r\nREPLACE THIS TEXT WITH THE LOG OUTPUT\r\n```\r\nc:\\>streamlink --loglevel debug https://goodgame.ru/channel/Miker/#autoplay best\r\n[cli][debug] OS:         Windows 7\r\n[cli][debug] Python:     3.6.6\r\n[cli][debug] Streamlink: 1.1.1\r\n[cli][debug] Requests(2.21.0), Socks(1.6.7), Websocket(0.56.0)\r\n[cli][info] Found matching plugin goodgame for URL https://goodgame.ru/channel/Miker/#autoplay\r\nTraceback (most recent call last):\r\n  File \"runpy.py\", line 193, in _run_module_as_main\r\n  File \"runpy.py\", line 85, in _run_code\r\n  File \"C:\\Program Files (x86)\\Streamlink\\bin\\streamlink.exe\\__main__.py\", line 18, in <module>\r\n  File \"C:\\Program Files (x86)\\Streamlink\\pkgs\\streamlink_cli\\main.py\", line 1033, in main\r\n    handle_url()\r\n  File \"C:\\Program Files (x86)\\Streamlink\\pkgs\\streamlink_cli\\main.py\", line 577, in handle_url\r\n    streams = fetch_streams(plugin)\r\n  File \"C:\\Program Files (x86)\\Streamlink\\pkgs\\streamlink_cli\\main.py\", line 457, in fetch_streams\r\n    sorting_excludes=args.stream_sorting_excludes)\r\n  File \"C:\\Program Files (x86)\\Streamlink\\pkgs\\streamlink\\plugin\\plugin.py\", line 317, in streams\r\n    ostreams = self._get_streams()\r\n  File \"C:\\Program Files (x86)\\Streamlink\\pkgs\\streamlink\\plugins\\goodgame.py\", line 49, in _get_str\r\neams\r\n    **channel_info)\r\n  File \"logging\\__init__.py\", line 1295, in debug\r\nTypeError: _log() got an unexpected keyword argument 'id'\r\n\r\n### Additional comments, screenshots, etc.\r\n\r\n\r\n\r\n[Love Streamlink? Please consider supporting our collective. Thanks!](https://opencollective.com/streamlink/donate)\r\n\n", "before_files": [{"content": "import re\n\nfrom streamlink.plugin import Plugin\nfrom streamlink.stream import HLSStream\nfrom streamlink.utils import parse_json\n\nHLS_URL_FORMAT = \"https://hls.goodgame.ru/hls/{0}{1}.m3u8\"\nQUALITIES = {\n    \"1080p\": \"\",\n    \"720p\": \"_720\",\n    \"480p\": \"_480\",\n    \"240p\": \"_240\"\n}\n\n_url_re = re.compile(r\"https?://(?:www\\.)?goodgame.ru/channel/(?P<user>[^/]+)\")\n_apidata_re = re.compile(r'''(?P<quote>[\"']?)channel(?P=quote)\\s*:\\s*(?P<data>{.*?})\\s*,''')\n_ddos_re = re.compile(r'document.cookie=\"(__DDOS_[^;]+)')\n\n\nclass GoodGame(Plugin):\n    @classmethod\n    def can_handle_url(cls, url):\n        return _url_re.match(url)\n\n    def _check_stream(self, url):\n        res = self.session.http.get(url, acceptable_status=(200, 404))\n        if res.status_code == 200:\n            return True\n\n    def _get_streams(self):\n        headers = {\n            \"Referer\": self.url\n        }\n        res = self.session.http.get(self.url, headers=headers)\n\n        match = _ddos_re.search(res.text)\n        if match:\n            self.logger.debug(\"Anti-DDOS bypass...\")\n            headers[\"Cookie\"] = match.group(1)\n            res = self.session.http.get(self.url, headers=headers)\n\n        match = _apidata_re.search(res.text)\n        channel_info = match and parse_json(match.group(\"data\"))\n        if not channel_info:\n            self.logger.error(\"Could not find channel info\")\n            return\n\n        self.logger.debug(\"Found channel info: channelkey={channelkey} pid={streamkey} online={status}\",\n                          **channel_info)\n        if not channel_info['status']:\n            self.logger.debug(\"Channel appears to be offline\")\n\n        streams = {}\n        for name, url_suffix in QUALITIES.items():\n            url = HLS_URL_FORMAT.format(channel_info['streamkey'], url_suffix)\n            if not self._check_stream(url):\n                continue\n\n            streams[name] = HLSStream(self.session, url)\n\n        return streams\n\n\n__plugin__ = GoodGame\n", "path": "src/streamlink/plugins/goodgame.py"}], "after_files": [{"content": "import re\nimport logging\n\nfrom streamlink.plugin import Plugin\nfrom streamlink.stream import HLSStream\nfrom streamlink.utils import parse_json\n\nlog = logging.getLogger(__name__)\n\nHLS_URL_FORMAT = \"https://hls.goodgame.ru/hls/{0}{1}.m3u8\"\nQUALITIES = {\n    \"1080p\": \"\",\n    \"720p\": \"_720\",\n    \"480p\": \"_480\",\n    \"240p\": \"_240\"\n}\n\n_url_re = re.compile(r\"https?://(?:www\\.)?goodgame.ru/channel/(?P<user>[^/]+)\")\n_apidata_re = re.compile(r'''(?P<quote>[\"']?)channel(?P=quote)\\s*:\\s*(?P<data>{.*?})\\s*,''')\n_ddos_re = re.compile(r'document.cookie=\"(__DDOS_[^;]+)')\n\n\nclass GoodGame(Plugin):\n    @classmethod\n    def can_handle_url(cls, url):\n        return _url_re.match(url)\n\n    def _check_stream(self, url):\n        res = self.session.http.get(url, acceptable_status=(200, 404))\n        if res.status_code == 200:\n            return True\n\n    def _get_streams(self):\n        headers = {\n            \"Referer\": self.url\n        }\n        res = self.session.http.get(self.url, headers=headers)\n\n        match = _ddos_re.search(res.text)\n        if match:\n            log.debug(\"Anti-DDOS bypass...\")\n            headers[\"Cookie\"] = match.group(1)\n            res = self.session.http.get(self.url, headers=headers)\n\n        match = _apidata_re.search(res.text)\n        channel_info = match and parse_json(match.group(\"data\"))\n        if not channel_info:\n            self.logger.error(\"Could not find channel info\")\n            return\n\n        log.debug(\"Found channel info: id={id} channelkey={channelkey} pid={streamkey} online={status}\".format(**channel_info))\n        if not channel_info['status']:\n            log.debug(\"Channel appears to be offline\")\n\n        streams = {}\n        for name, url_suffix in QUALITIES.items():\n            url = HLS_URL_FORMAT.format(channel_info['streamkey'], url_suffix)\n            if not self._check_stream(url):\n                continue\n\n            streams[name] = HLSStream(self.session, url)\n\n        return streams\n\n\n__plugin__ = GoodGame\n", "path": "src/streamlink/plugins/goodgame.py"}]}