From ea4d4410be9791fff82fb52104334b5479836d7c Mon Sep 17 00:00:00 2001
From: SonnyPoint <sonitao@163.com>
Date: Sun, 26 Mar 2023 05:52:08 +0800
Subject: [PATCH 1/2] [sites:twitch] Add proxy support for connecting chatirc

Signed-off-by: SonnyPoint <sonitao@163.com>
---
 chat_downloader/sites/twitch.py | 25 ++++++++++++++++++++++---
 1 file changed, 22 insertions(+), 3 deletions(-)

diff --git a/chat_downloader/sites/twitch.py b/chat_downloader/sites/twitch.py
index 9cb2194..90dac7f 100644
--- a/chat_downloader/sites/twitch.py
+++ b/chat_downloader/sites/twitch.py
@@ -49,9 +49,24 @@ class TwitchError(SiteError):
 
 class TwitchChatIRC():
 
-    def __init__(self):
+    def __init__(self, proxy=None):
+
+        if proxy is not None:
+            # use pysocks when needed
+            import socks
+            from urllib.parse import urlparse
+            proxy_url = urlparse(proxy)
+            self.socket = socks.socksocket()
+            scheme = socks.HTTP
+            if proxy_url.scheme == "socks4" or proxy_url.scheme == "socks":
+                scheme = socks.SOCKS4
+            if proxy_url.scheme == "socks5":
+                scheme = socks.SOCKS5
+            self.socket.set_proxy(scheme, proxy_url.hostname, proxy_url.port)
+
         # create new socket
-        self.socket = socket.socket()
+        if proxy is None:
+            self.socket = socket.socket()
 
         # start connection
         self.socket.connect(('irc.chat.twitch.tv', 6667))
@@ -94,6 +109,10 @@ class TwitchChatDownloader(BaseChatDownloader):
 
     _NAME = 'twitch.tv'
 
+    def __init__(self, **kwargs):
+        super().__init__(**kwargs)
+        self.proxy = kwargs["proxy"]
+
     _TESTS = [
         # Live
         {
@@ -1516,7 +1535,7 @@ def _get_chat_messages_by_stream_id(self, stream_id, params):
         def create_connection():
             for attempt_number in attempts(max_attempts):
                 try:
-                    irc = TwitchChatIRC()
+                    irc = TwitchChatIRC(self.proxy)
                     irc.set_timeout(message_receive_timeout)
                     irc.join_channel(stream_id)
                     return irc

From 89f72493d19096749bead8faeb58c8289ccbc27b Mon Sep 17 00:00:00 2001
From: SonnyPoint <sonitao@163.com>
Date: Sun, 26 Mar 2023 05:52:50 +0800
Subject: [PATCH 2/2] [setup] Add pysocks to requirements

Signed-off-by: SonnyPoint <sonitao@163.com>
---
 setup.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/setup.py b/setup.py
index 89c4352..04990df 100644
--- a/setup.py
+++ b/setup.py
@@ -20,7 +20,8 @@
     'isodate',
     'docstring-parser',
     'colorlog',
-    'websocket-client'
+    'websocket-client',
+    'pysocks'
 ]
 
 setup(