Python으로 QQ 로봇을 개발하는 방법

머리말

이 기사는 궁극적으로 Python으로 Mirai 로봇을 개발한다는 목표를 달성했지만 시작 튜토리얼, 특히 환경 구성에는 여전히 동일한 작업이 많이 있으며 다른 프로그래밍 언어에 대한 교훈도 여전히 있습니다.

mirai 생태계를 운영하기 위해 Java, Python 등 필요한 환경을 설치했다고 가정합니다.

미라이 생태

  • 미라이 공식 생태 문서

  • mirai를 사용하여 QQ 로봇을 개발하려면 먼저 그 생태에 대해 어느 정도 이해해야 합니다. 왜냐하면 너무 복잡하고 함정이 많기 때문입니다. 이에 대해 더 많이 알면 문제에 직면했을 때 더 빨리 해결할 수 있을 것입니다.

  • 미라이 생태개요도

그림

  • 간단히 말해서, mirai 생태계의 핵심은 mirai-core 및 mirai-core-api를 포함하는 Mirai 프레임워크입니다.

  • 그 중 전자는 프로토콜 관련 내용을 담당하고, 후자는 전자를 운영하기 위한 외부 인터페이스를 제공하는 역할을 담당한다. 따라서 프로그래머와 직접 거래하는 것은 mirai-core-api이며, mirai-core는 우리에게 보이지 않습니다.

  • QQ 로봇은 mirai-core-api를 사용하여 이미 개발할 수 있지만 아직 초보자에게는 너무 어렵기 때문에 공식 mirai 개발팀은 mirai 프레임워크에서 제공하는 기본 기능을 사용하는 QQ 로봇 프로그램인 mirai-console을 기반으로 했습니다. 이에 캡슐화되어 더욱 편리한 개방형 인터페이스를 제공합니다.

  • mirai-console을 사용하면 더 이상 mirai의 QQ 로봇을 직접 개발할 필요가 없지만 다음 모델과 같은 mirai-console 플러그인을 개발할 수 있습니다.

그림

  • 당황스러운 점은 mirai-console 플러그인을 개발하려면 java나 kotlin을 사용해야 한다는 것입니다. 저처럼 익숙하지 않다면 또 다른 공식 플러그인인 mirai-api-http를 사용하면 이 문제를 해결할 수 있습니다.

  • 따라서 mirai-api-http를 사용하여 QQ 로봇을 개발하면 다음 모델이 되었습니다.

그림

  • 보시다시피 mirai-api-http를 사용하면 더 많은 개발 언어를 선택할 수 있습니다. 여기서는 Python을 선택합니다.

시작

mirai-console-loader를 사용하여 mirai-console 시작

위의 소개에 따르면 mirai QQ 로봇을 개발하려면 먼저 mirai-console을 실행해야 하는데 이 단계를 달성하기가 어렵습니다. 예를 들어 mirai-core, mirai-console 및 mirai-console-terminal을 준비한 다음 긴 일련의 지침을 통해 시작해야 합니다.

공식적으로는 이 점을 고려하여 이 어려운 작업에 좌절한 신규 사용자들을 구하기 위해 공식적으로 mirai-console-loader(줄여서 mcl) - mirai-console의 공식 원클릭 런처를 출시했습니다. 따라서 다운로드만 하면 됩니다(첫 번째 단계에서 언급한 대로 0.0에 대해 걱정하지 마세요). Github 창고 위치: mirai-console-loader[2]

mcl을 다운로드한 후 압축을 풀고 cmd를 열고 mcl이 있는 디렉터리로 전환한 후 mcl을 실행합니다. 아래 그림과 같이:

그림

다른 것이 없다면 아래와 같이 mirai-console이 성공적으로 시작되었습니다.

그림

하지만 공식 홈페이지에서 다운로드한 프로젝트는 실행 시 0.0 오류가 발생했습니다(오류가 발생하지 않았다면 이 단계를 무시하세요). 그 이유는 구성 파일에 오류가 있기 때문입니다(너무 나쁩니다 - -).

수정 방법은 다음과 같습니다.

그림

그런 다음 mcl을 다시 실행하면 예상대로 성공적으로 실행될 수 있습니다. 첫 번째 큰 장애물을 통과하고... 또 다른 큰 장애물이 있습니다.

mirai-login-solver-selenium을 사용하여 슬라이더 확인 보조 로그인을 처리합니다.

성공적으로 시작된 mcl 창에서 qq: 로그인 계정 비밀번호에 로그인하는 명령을 실행하면 오류가 발생합니다. 로그인 시 mirai-console이 슬라이더 확인을 처리할 수 없기 때문입니다.

그림

따라서 로그인을 지원하려면 mirai의 또 다른 프로젝트인 mirai-login-solver-selenium[3]이 필요합니다.

mirai-login-solver-selenium 설치 단계(먼저 Chrome 브라우저를 설치해야 함) 

먼저 이전에 실행 중인 mirai-console을 종료한 후 명령줄에서 다음 명령을 실행하여 패키지를 추가합니다.

mcl --update-package net.mamoe:mirai-login-solver-selenium --channel nightly --type plugin

그런 다음 mcl을 다시 실행하면 mcl이 mirai-login-solver-selenium 다운로드를 시도합니다.

그런데 이 단계에서도 문제가 있었습니다(문제가 없다면 건너뛰시기 바랍니다). 셀레늄을 사용하기 때문에 크롬드라이버를 사용해야 합니다. 하지만 chromedriver 다운로드는 항상 실패하므로 이 단계에서는 chromedriver를 수동으로 다운로드한 후 해당 디렉터리에 교체해야 합니다. 다음과 같이 진행하세요:

1. cmd 창을 확인하여 다운로드 중인 chromedriver mcl 버전을 확인합니다.

그림

2. 그런 다음 다운로드할 chromedriver의 다른 미러 소스로 이동합니다. 권장 사항: chromedriver[4] 

3. 버전 번호가 비슷한 것을 찾으세요. 예를 들어 86.0.4240.22를 다운로드하겠습니다.

그림

4. 다운로드한 파일의 압축을 풀고 방금 명령줄 창에서 본 파일 이름인 chromedriver-86.0.4240.198.exe로 이름을 변경합니다. 이 이름은 다운로드하려는 파일 이름과 일치해야 합니다.

5. 이전에 실행했던 mcl 명령줄 프로그램을 종료하고 준비된 chromedriver-86.0.4240.198.exe를 다음 디렉터리에 교체합니다.

그림

6. mcl 프로그램을 다시 실행합니다. 모든 것이 순조롭게 진행되면 이전 단계를 계속하여 로그인 계정 비밀번호 명령을 입력하고 로그인을 시도할 수 있습니다. 그러면 브라우저 창이 뜨는데, 바보같은 방법으로 로그인 인증만 완료하면 됩니다. 로그인에 성공하면 앞으로는 로그인할 때마다 다시 인증할 필요가 없습니다.

또 다른 장애물을 넘었고...그리고 또 다른 장애물이 닥쳤습니다

mirai-api-http를 사용하여 언어 확장성을 높입니다. (다른 언어로 개발할 수 있도록)

mirai-api-http에 대해 이야기해 왔지만 아직까지는 사용하지 않았습니다. 이전 작업에서는 두 가지 작업을 수행했습니다.

  1. mcl을 사용하여 mirai 콘솔 실행

  2. mirai-login-solver-selenium을 사용하면 슬라이더 확인 코드를 전달하여 로그인을 완료할 수 있습니다.

그런 다음 mirai-api-http를 사용하여 시작하고 먼저 mirai-api-http 프로젝트 주소에서 mirai-api-http[5]를 다운로드합니다.

그런 다음 그림과 같이 다운로드한 jar 패키지를 플러그인 폴더에 넣습니다.

그림

그런 다음 mcl을 다시 시작하고 다시 로그인하십시오. 이렇게 준비작업은 완료되었으나 약간의 오류가 있습니다.서명확인 문제인것 같습니다.오류는 다음과 같습니다.

그림

여러분들께 상담을 해보니 oracle JDK의 문제라는 것을 알게 되었기 때문에 orcaleJDK를 open JDK로 교체하기만 하면 됩니다. 단계는 다음과 같습니다.

1. 오픈 JDK[6]를 다운로드합니다. 예를 들어, 그림에 표시된 버전을 다운로드했습니다.

그림

2. 열려있는 JDK의 압축을 풀고 적절하다고 생각되는 위치에 배치합니다.예를 들어 저는 아래 그림과 같이 배치했습니다.

그림

3. 환경 변수에 jdk 경로를 추가합니다: 이 컴퓨터 -> 속성 마우스 오른쪽 버튼 클릭 -> 고급 시스템 설정 -> 고급 -> 환경 변수를 선택한 후 아래 단계를 따르세요.

그림

그림

graia-application-mirai를 통해 Python을 사용하여 mirai 로봇 개발

이 단계까지의 이전 작업은 기본적으로 Java/Kotlin 이외의 언어를 사용하는 모든 프로그래머에게 공통적입니다. 다음 작업은 Python을 사용하는 프로그래머를 위해서만 작성되었습니다.

graia-application-mirai 공식 문서[7]

먼저 그림과 같이 mirai-api-http를 구성합니다.

그림

아래 내용은 참고사항이므로 선택하시면 됩니다.

# file: mcl-1.0.3/config/net.mamoe.mirai.api.http/setting.yml
authKey: graia-mirai-api-http-authkey # 你可以自己设定, 这里作为示范

# 可选,缓存大小,默认4096.缓存过小会导致引用回复与撤回消息失败
cacheSize: 4096

enableWebsocket: true # 是否启用 websocket 方式, 若使用 websocket 方式交互会得到更好的性能
host: '0.0.0.0' # httpapi 服务监听的地址, 错误的设置会造成 Graia Application 无法与其交互
port: 8080 # httpapi 服务监听的端口, 错误的设置会造成 Graia Application 无法与其交互

mcl을 다시 시작하고 구성을 업데이트하세요.

다음으로 mirai-api-http 인터페이스를 작동하기 위해 Python용 모듈을 설치합니다: graia-application-mirai

pip install graia-application-mirai

다음 코드를 bot.py에 복사하고, 주석 프롬프트를 따르고, 지금의 mirai-api-http 구성에 따라 약간 수정합니다. 그런 다음 실행

from graia.broadcast import Broadcast
from graia.application import GraiaMiraiApplication, Session
from graia.application.message.chain import MessageChain
import asyncio

from graia.application.message.elements.internal import Plain
from graia.application.friend import Friend

loop = asyncio.get_event_loop()

bcc = Broadcast(loop=loop)
app = GraiaMiraiApplication(
    broadcast=bcc,
    connect_info=Session(
        host="http://localhost:8080", # 填入 httpapi 服务运行的地址
        authKey="graia-mirai-api-http-authkey", # 填入 authKey
        account=5234120587, # 你的机器人的 qq 号
        websocket=True # Graia 已经可以根据所配置的消息接收的方式来保证消息接收部分的正常运作.
    )
)

@bcc.receiver("FriendMessage")
async def friend_message_listener(app: GraiaMiraiApplication, friend: Friend):
    await app.sendFriendMessage(friend, MessageChain.create([
        Plain("Hello, World!")
    ]))

app.launch_blocking()

그런 다음 QQ 로봇에 임의의 메시지를 보내고 Hello, World!라고 응답하면 작업이 성공한 것입니다.

성공은 다음과 같습니다.

그림

결론

위의 모든 작업은 mirai를 사용하여 QQ 로봇을 개발하기 위한 시작 튜토리얼일 뿐입니다.더 많은 내용을 알고 싶다면 공식 문서를 읽고 더 많은 API를 배워야 합니다.

더 흥미로운 튜토리얼을 보려면 스테이션 B에서 "Qianfeng Education"을 검색하세요. 

Qianfeng Education의 Python 비디오 튜토리얼 전체 세트, Excel, Word, PPT, 이메일, 크롤러 및 사무 자동화를 쉽게 마스터함(Song Runing 강의)

 

추천

출처blog.csdn.net/GUDUzhongliang/article/details/134726778