Buddha7771 / ChzzkChat

파이썬 치지직 채팅 크롤러
23 stars 4 forks source link

웹소켓 채팅 보내기 #1

Closed 24802 closed 8 months ago

24802 commented 9 months ago

안녕하세요. 비전공자라서 이슈로 여쭈어봅니다..

쿠키로 로그인된 상태로 wss에 접속되는걸 확인했는데 혹시 명령어 봇 같이 코멘트를 감지하고 메시지를 보내는 것이 지금 api로 가능할까요?

웹소켓 메시지를 보내는 것이 난이도가 높은 것 같아서 여쭤봅니다..

White0601 commented 9 months ago

안녕하세요. 비전공자2 라서 해당 코드를 실행 하니 아래 처럼 치지직 스트리머 id에 오류가 발생 하는 걸로 확인이 되는데 그래서 별도로 8a59b34b46271960c1bf172bb0fac758 채널 id를 직접 활용해서 채널 정보 가져오는 api 코드를 작성 하여서 실행 해 보니 문제 없이 api가 호출 되었습니다.

치지직 로그인 해서 쿠키 정보도 다 넣었고 하나 문제?가 발생 한 것이 쿠키 정보를 넣으니 스테이징된 변경 사항이라면서 cookies.json 해당 파일에 경고? 가 뜨더라고요

Traceback (most recent call last): File "C:\Users\yunseong.kim\Desktop\test1\api.py", line 9, in fetch_chatChannelId return response['content']['chatChannelId']


KeyError: 'content'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\yunseong.kim\Desktop\test1\run.py", line 141, in <module>
    ChzzkChat(args.streamer_id, cookies, logger)
  File "C:\Users\yunseong.kim\Desktop\test1\run.py", line 20, in __init__
    self.chatChannelId = api.fetch_chatChannelId(self.streamer)
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\yunseong.kim\Desktop\test1\api.py", line 11, in fetch_chatChannelId
    raise ValueError(f'잘못된 입력값 : {streamer}')
ValueError: 잘못된 입력값 : 8a59b34b46271960c1bf172bb0fac758
24802 commented 9 months ago

@yunseongkim0601

api.py 6번째 줄 url을 url = f'https://api.chzzk.naver.com/polling/v2/channels/{streamer}/live-status'로 수정해보세요.

Buddha7771 commented 9 months ago

안녕하세요. 비전공자라서 이슈로 여쭈어봅니다..

쿠키로 로그인된 상태로 wss에 접속되는걸 확인했는데 혹시 명령어 봇 같이 코멘트를 감지하고 메시지를 보내는 것이 지금 api로 가능할까요?

웹소켓 메시지를 보내는 것이 난이도가 높은 것 같아서 여쭤봅니다..

가능합니다.

run.py 파일에 있는 ChzzkChat 클래스에 send 매소드를 추가하였으니 참고바랍니다.

Buddha7771 commented 9 months ago

안녕하세요. 비전공자2 라서 해당 코드를 실행 하니 아래 처럼 치지직 스트리머 id에 오류가 발생 하는 걸로 확인이 되는데 그래서 별도로 8a59b34b46271960c1bf172bb0fac758 채널 id를 직접 활용해서 채널 정보 가져오는 api 코드를 작성 하여서 실행 해 보니 문제 없이 api가 호출 되었습니다.

치지직 로그인 해서 쿠키 정보도 다 넣었고 하나 문제?가 발생 한 것이 쿠키 정보를 넣으니 스테이징된 변경 사항이라면서 cookies.json 해당 파일에 경고? 가 뜨더라고요

Traceback (most recent call last): File "C:\Users\yunseong.kim\Desktop\test1\api.py", line 9, in fetch_chatChannelId return response['content']['chatChannelId'] ~~~~^^^^^^^^^^^ KeyError: 'content'

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "C:\Users\yunseong.kim\Desktop\test1\run.py", line 141, in ChzzkChat(args.streamer_id, cookies, logger) File "C:\Users\yunseong.kim\Desktop\test1\run.py", line 20, in init self.chatChannelId = api.fetch_chatChannelId(self.streamer) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\yunseong.kim\Desktop\test1\api.py", line 11, in fetch_chatChannelId raise ValueError(f'잘못된 입력값 : {streamer}') ValueError: 잘못된 입력값 : 8a59b34b46271960c1bf172bb0fac758

Api 문제로 해당 부분 수정하여 커밋하였습니다.

White0601 commented 9 months ago

혹시 해당 크롤링을 통해서 후원 채팅은 가져 올 수 없나요? 후원 채팅은 건너뛰는거 같아서요

Buddha7771 commented 9 months ago

혹시 해당 크롤링을 통해서 후원 채팅은 가져 올 수 없나요? 후원 채팅은 건너뛰는거 같아서요

후원 채팅도 감지되도록 수정하였습니다.

White0601 commented 9 months ago

후원 채팅에서 후원한 금액을 log에 남길 수 있나요?

Buddha7771 commented 9 months ago

후원 채팅에서 후원한 금액을 log에 남길 수 있나요?

chat_data의 extras 값에 후원 금액이 표시되어 있습니다.

eagleone7 commented 9 months ago

https://github.com/24802/ChzzkChat-Bot 이곳에 등록된 run.py 관련 이슈

안녕하세요! 개발자님. 제가 비전공자인데, 이슈가 발생해서 질문을 남깁니다. VS코드에서 터미널 Bash를 통해서 python run.py 실행했는데 오류가 뜹니다.

방송 오프인 채널에 연결하면 " 채널 방송이 종료되었습니다. 10초 후 재연결을 시도합니다"라고 뜨는데

방송 켜진 채널에 연결하면 $ python run.py 채널 방송이 시작되었습니다. Exception in thread Thread-1 (run_chat_crawler): Traceback (most recent call last): File "C:\Users\ABCD\AppData\Local\Programs\Python\Python312\Lib\threading.py", line 1073, in _bootstrap_inner self.run() File "C:\Users\ABCD\AppData\Local\Programs\Python\Python312\Lib\threading.py", line 1010, in run self._target(*self._args, **self._kwargs) File "C:\Users\ABCD\OneDrive\바탕 화면\코드\VS Code\ChzzkChat-Bot-master\chzzkchat-bot-master\run.py", line 256, in run_chat_crawler chzzkchat = ChzzkChat(streamer_id, cookies, logger) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ABCD\OneDrive\바탕 화면\코드\VS Code\ChzzkChat-Bot-master\chzzkchat-bot-master\run.py", line 28, in init self.connect() File "C:\Users\ABCD\OneDrive\바탕 화면\코드\VS Code\ChzzkChat-Bot-master\chzzkchat-bot-master\run.py", line 45, in connect sock = WebSocket() ^^^^^^^^^^^ TypeError: WebSocket.init() missing 3 required positional arguments: 'environ', 'socket', and 'rfile'

코드가 뜹니다 해결방법이 궁금합니다

혹시, 별도로 추가적으로 설치해야되는게 있나요?

eagleone7 commented 9 months ago

그리고 명령어 관련 메세지를 제가 직접 코드에 추가하고 싶은데 코드를 어떻게 짜야될지 잘 모르겠습니다 !안녕 이라는 메세지에 안녕하세요 라고 응답하면 좋겠고 그리고 !출첵 기능도 구현하고 싶은데, 어떻게 해야되는지도 궁금합니다 !출첵이라고 하면 "(유저네임) --> (오늘의 날짜) 출석을 하셨습니다. 감사합니다 (총 출석횟수)회 " 라고 구현하고 싶습니다. 어떤 코드를 어디에 어떻게 추가시켜야될지 모르겠는데, 알려주실 수 있으신가요?

Buddha7771 commented 8 months ago

https://github.com/24802/ChzzkChat-Bot 이곳에 등록된 run.py 관련 이슈

안녕하세요! 개발자님. 제가 비전공자인데, 이슈가 발생해서 질문을 남깁니다. VS코드에서 터미널 Bash를 통해서 python run.py 실행했는데 오류가 뜹니다.

방송 오프인 채널에 연결하면 " 채널 방송이 종료되었습니다. 10초 후 재연결을 시도합니다"라고 뜨는데

방송 켜진 채널에 연결하면 $ python run.py 채널 방송이 시작되었습니다. Exception in thread Thread-1 (run_chat_crawler): Traceback (most recent call last): File "C:\Users\ABCD\AppData\Local\Programs\Python\Python312\Lib\threading.py", line 1073, in _bootstrap_inner self.run() File "C:\Users\ABCD\AppData\Local\Programs\Python\Python312\Lib\threading.py", line 1010, in run self._target(*self._args, **self._kwargs) File "C:\Users\ABCD\OneDrive\바탕 화면\코드\VS Code\ChzzkChat-Bot-master\chzzkchat-bot-master\run.py", line 256, in run_chat_crawler chzzkchat = ChzzkChat(streamer_id, cookies, logger) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ABCD\OneDrive\바탕 화면\코드\VS Code\ChzzkChat-Bot-master\chzzkchat-bot-master\run.py", line 28, in init self.connect() File "C:\Users\ABCD\OneDrive\바탕 화면\코드\VS Code\ChzzkChat-Bot-master\chzzkchat-bot-master\run.py", line 45, in connect sock = WebSocket() ^^^^^^^^^^^ TypeError: WebSocket.init() missing 3 required positional arguments: 'environ', 'socket', and 'rfile'

코드가 뜹니다 해결방법이 궁금합니다

혹시, 별도로 추가적으로 설치해야되는게 있나요?

websocket 라이브러리 문제인 것 같습니다. 미니콘다로 새로운 환경을 만드시고 리드미의 설치 방법을 그대로 따라하시면 될 것 같습니다.

두번째 질문 같은 경우 run.py의 141번 째 줄에 있는 chat_data["msg"]에 채팅 메세지가 들어있습니다. 이를 이용해 176번째 줄에 있는 send 메서드를 활용하시면 기능을 구현할 수 있을 것 같습니다.

eagleone-7 commented 8 months ago

개발자님 추가 질문이 있습니다. 혹시 https://github.com/24802/ChzzkChat-Bot 에 등록된 코드에 대해서도 문제 해결방법을 알려주실 수 있으신가요??

터미널에서 python run.py 실행해서 채팅 기록을 불러오는데까지는 성공했습니다.

하지만, 다음과 같은 문제가 발생했습니다. !명령어 추가 인사 안녕하세요 라고 입력하니 [2024-01-28 22:32:05] str 개체에 get 특성이 없는 채팅 [2024-01-28 22:32:06] str 개체에 get 특성이 없는 채팅 [2024-01-28 22:32:12] str 개체에 get 특성이 없는 채팅 [2024-01-28 22:32:12] str 개체에 get 특성이 없는 채팅 라고 뜹니다.

혹시나 싶어서, 156번째줄에 있는 기존 코드와 "is_authorized = True" 로 바꾼 다음에도 실행을 해봤습니다. (기존 코드-156번째 줄) "is_authorized = any("채널 관리자" in badge.get('title', '') or "스트리머" in badge.get('title', '') for badge in profile_data.get("activityBadges", []))" (변경해서 시도한 코드-156줄에 있던 기존 코드를 다음과 같이 변경) "is_authorized = True"

두가지 방법으로 했는데도, 똑같이 str 개체에 get 특성이 없는 채팅 라는 문구가 뜹니다. 어떻게 해결해야되는지 궁금합니다.

추가적으로, 스트리머&매니저 이외에 특정 UID가 !명령어 추가/수정/제거도 할 수 있도록 코드를 짤 수 있을까요? 짤수있다면 어디에 어떤 코드를 어떻게 붙여야되는지 궁금합니다..

그리고, !명령어 추가/제거/수정을 위해서 실시간 채팅에 어떻게 적어야되는지도 궁금합니다.

eagleone7 commented 8 months ago

https://github.com/24802/ChzzkChat-Bot 이곳에 등록된 run.py 관련 이슈 안녕하세요! 개발자님. 제가 비전공자인데, 이슈가 발생해서 질문을 남깁니다. VS코드에서 터미널 Bash를 통해서 python run.py 실행했는데 오류가 뜹니다. 방송 오프인 채널에 연결하면 " 채널 방송이 종료되었습니다. 10초 후 재연결을 시도합니다"라고 뜨는데 방송 켜진 채널에 연결하면 $ python run.py 채널 방송이 시작되었습니다. Exception in thread Thread-1 (run_chat_crawler): Traceback (most recent call last): File "C:\Users\ABCD\AppData\Local\Programs\Python\Python312\Lib\threading.py", line 1073, in _bootstrap_inner self.run() File "C:\Users\ABCD\AppData\Local\Programs\Python\Python312\Lib\threading.py", line 1010, in run self._target(*self._args, **self._kwargs) File "C:\Users\ABCD\OneDrive\바탕 화면\코드\VS Code\ChzzkChat-Bot-master\chzzkchat-bot-master\run.py", line 256, in run_chat_crawler chzzkchat = ChzzkChat(streamer_id, cookies, logger) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ABCD\OneDrive\바탕 화면\코드\VS Code\ChzzkChat-Bot-master\chzzkchat-bot-master\run.py", line 28, in init self.connect() File "C:\Users\ABCD\OneDrive\바탕 화면\코드\VS Code\ChzzkChat-Bot-master\chzzkchat-bot-master\run.py", line 45, in connect sock = WebSocket() ^^^^^^^^^^^ TypeError: WebSocket.init() missing 3 required positional arguments: 'environ', 'socket', and 'rfile' 코드가 뜹니다 해결방법이 궁금합니다 혹시, 별도로 추가적으로 설치해야되는게 있나요?

websocket 라이브러리 문제인 것 같습니다. 미니콘다로 새로운 환경을 만드시고 리드미의 설치 방법을 그대로 따라하시면 될 것 같습니다.

두번째 질문 같은 경우 run.py의 141번 째 줄에 있는 chat_data["msg"]에 채팅 메세지가 들어있습니다. 이를 이용해 176번째 줄에 있는 send 메서드를 활용하시면 기능을 구현할 수 있을 것 같습니다.

개발자님 덕분에 문제를 해결했습니다!🙏 채팅 보내기 관련해서 추가적인 질문이 있습니다. 우선 제가 비전공자인 코린이라서 이 부분 부디 양해부탁드립니다..

개발자님께서 이렇게 답장을 주셔서 "두번째 질문 같은 경우 run.py의 141번 째 줄에 있는 chat_data["msg"]에 채팅 메세지가 들어있습니다. 이를 이용해 176번째 줄에 있는 send 메서드를 활용하시면 기능을 구현할 수 있을 것 같습니다. 이걸 어떻게 구현해야되는지 모르겟습니다"

제 나름대로 아주 간단하게 "!안녕"이라는 채팅에 "안녕하세요"라고 답장을 하도록 짜서 python run.py 해봤습니다. 실시간 채팅 기록이 vs코드 bash랑 chat.log에서는 "!안녕"이라는 채팅이 올라옴에도 불구하고 cookies.json에 등록된 계정이 실시간 채팅으로 "안녕하세요"라고 답장을 안하고 있습니다.

제가 나름대로 짠 코드는 다음과 같습니다.

139번쨰 줄에 (첫번째 코드) now = datetime.datetime.fromtimestamp(chat_data['msgTime']/1000) now = datetime.datetime.strftime(now, '%Y-%m-%d %H:%M:%S')

    message_text = chat_data["msg"]
    if message_text.startswith('!안녕'):
        response_message = '안녕하세요!'
        self.send(response_message)

라고 추가를 해봤고 (첫번째 코드를 지우고 두번째 코드)

    if message_text.startswith('!안녕'):
        response_message = '안녕하세요!'
        self.send(response_message)

이렇게도 추가를 해봤는데

아무런 답장을 안보내고 있습니다. 괜찮으시다면, 코드를 어떻게 짜야되는지 알려주실 수 있으신가요? 그리고 어디에 추가를 해야되는지 변경해야 되는 부분이 있다면 어느 부분을 변경해야되는지도 궁금합니다...

Buddha7771 commented 8 months ago

https://github.com/24802/ChzzkChat-Bot 이곳에 등록된 run.py 관련 이슈 안녕하세요! 개발자님. 제가 비전공자인데, 이슈가 발생해서 질문을 남깁니다. VS코드에서 터미널 Bash를 통해서 python run.py 실행했는데 오류가 뜹니다. 방송 오프인 채널에 연결하면 " 채널 방송이 종료되었습니다. 10초 후 재연결을 시도합니다"라고 뜨는데 방송 켜진 채널에 연결하면 $ python run.py 채널 방송이 시작되었습니다. Exception in thread Thread-1 (run_chat_crawler): Traceback (most recent call last): File "C:\Users\ABCD\AppData\Local\Programs\Python\Python312\Lib\threading.py", line 1073, in _bootstrap_inner self.run() File "C:\Users\ABCD\AppData\Local\Programs\Python\Python312\Lib\threading.py", line 1010, in run self._target(*self._args, **self._kwargs) File "C:\Users\ABCD\OneDrive\바탕 화면\코드\VS Code\ChzzkChat-Bot-master\chzzkchat-bot-master\run.py", line 256, in run_chat_crawler chzzkchat = ChzzkChat(streamer_id, cookies, logger) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ABCD\OneDrive\바탕 화면\코드\VS Code\ChzzkChat-Bot-master\chzzkchat-bot-master\run.py", line 28, in init self.connect() File "C:\Users\ABCD\OneDrive\바탕 화면\코드\VS Code\ChzzkChat-Bot-master\chzzkchat-bot-master\run.py", line 45, in connect sock = WebSocket() ^^^^^^^^^^^ TypeError: WebSocket.init() missing 3 required positional arguments: 'environ', 'socket', and 'rfile' 코드가 뜹니다 해결방법이 궁금합니다 혹시, 별도로 추가적으로 설치해야되는게 있나요?

websocket 라이브러리 문제인 것 같습니다. 미니콘다로 새로운 환경을 만드시고 리드미의 설치 방법을 그대로 따라하시면 될 것 같습니다. 두번째 질문 같은 경우 run.py의 141번 째 줄에 있는 chat_data["msg"]에 채팅 메세지가 들어있습니다. 이를 이용해 176번째 줄에 있는 send 메서드를 활용하시면 기능을 구현할 수 있을 것 같습니다.

개발자님 덕분에 문제를 해결했습니다!🙏 채팅 보내기 관련해서 추가적인 질문이 있습니다. 우선 제가 비전공자인 코린이라서 이 부분 부디 양해부탁드립니다..

개발자님께서 이렇게 답장을 주셔서 "두번째 질문 같은 경우 run.py의 141번 째 줄에 있는 chat_data["msg"]에 채팅 메세지가 들어있습니다. 이를 이용해 176번째 줄에 있는 send 메서드를 활용하시면 기능을 구현할 수 있을 것 같습니다. 이걸 어떻게 구현해야되는지 모르겟습니다"

제 나름대로 아주 간단하게 "!안녕"이라는 채팅에 "안녕하세요"라고 답장을 하도록 짜서 python run.py 해봤습니다. 실시간 채팅 기록이 vs코드 bash랑 chat.log에서는 "!안녕"이라는 채팅이 올라옴에도 불구하고 cookies.json에 등록된 계정이 실시간 채팅으로 "안녕하세요"라고 답장을 안하고 있습니다.

제가 나름대로 짠 코드는 다음과 같습니다.

139번쨰 줄에 (첫번째 코드) now = datetime.datetime.fromtimestamp(chat_data['msgTime']/1000) now = datetime.datetime.strftime(now, '%Y-%m-%d %H:%M:%S')

    message_text = chat_data["msg"]
    if message_text.startswith('!안녕'):
        response_message = '안녕하세요!'
        self.send(response_message)

라고 추가를 해봤고 (첫번째 코드를 지우고 두번째 코드)

    if message_text.startswith('!안녕'):
        response_message = '안녕하세요!'
        self.send(response_message)

이렇게도 추가를 해봤는데

아무런 답장을 안보내고 있습니다. 괜찮으시다면, 코드를 어떻게 짜야되는지 알려주실 수 있으신가요? 그리고 어디에 추가를 해야되는지 변경해야 되는 부분이 있다면 어느 부분을 변경해야되는지도 궁금합니다...

send 메서드의 api 문제로 메세지 전송이 안되는 문제인 것 같습니다. 해당 메서드 수정하여 커밋하였습니다.