Mixin Network 是一個免費極速的點對點加密數字貨幣交易系統.
在本章中,你能夠按教程在Mixin Messenger中建立一個bot來接收用戶消息, 學到如何給機器人轉比特幣 或者 讓機器人給你轉比特幣.python
經過本教程,你將學會如何用Python建立一個機器人APP,讓它能接受消息.github
本教程基於Python 3.7.2, 因此你須要安裝Python 3.7.2 或 以上的版本.web
on macOSjson
brew upgrade brew install python@3
on Ubuntu, 從第三方的APT源中安裝.bootstrap
sudo apt update sudo apt install software-properties-common sudo add-apt-repository ppa:deadsnakes/ppa
當出現下面的提示時,按"回車"繼續.api
Press [ENTER] to continue or Ctrl-c to cancel adding it.
從新更新一次apt源, 再安裝python3.7, python3.7-venvbash
sudo apt update sudo apt install python3.7 python3.7-venv sudo ln -s /usr/bin/python3.7 /usr/bin/python3
檢查安裝是否成功了,須要檢查python3與python3-venv, 正確的提示以下:服務器
$ python3 -V Python 3.7.2
root@n2:~ python3 -m venv -h usage: venv [-h] [--system-site-packages] [--symlinks | --copies] [--clear] [--upgrade] [--without-pip] [--prompt PROMPT] ENV_DIR [ENV_DIR ...] Creates virtual Python environments in one or more target directories. positional arguments: ENV_DIR A directory to create the environment in. optional arguments: -h, --help show this help message and exit --system-site-packages Give the virtual environment access to the system site-packages dir. --symlinks Try to use symlinks rather than copies, when symlinks are not the default for the platform. --copies Try to use copies rather than symlinks, even when symlinks are the default for the platform. --clear Delete the contents of the environment directory if it already exists, before environment creation. --upgrade Upgrade the environment directory to use this version of Python, assuming Python has been upgraded in-place. --without-pip Skips installing or upgrading pip in the virtual environment (pip is bootstrapped by default) --prompt PROMPT Provides an alternative prompt prefix for this environment. Once an environment has been created, you may wish to activate it, e.g. by sourcing an activate script in its bin directory
你首先須要建立項目目錄,初始化"虛擬環境",而後安裝須要的軟件包.websocket
mkdir mixin_labs-python-bot cd mixin_labs-python-bot python3 -m venv ./
在 python3 -m venv 指令完成以後, 項目目錄以下:
wenewzha:mixin_labs-python-bot wenewzhang$ ls bin include lib pyvenv.cfg
當"虛擬環境"建立成功後,須要激活它, 經過執行bin目錄下相應的activate文件完成.
wenewzha:mixin_labs-python-bot wenewzhang$ source ./bin/activate (mixin_labs-python-bot) wenewzha:mixin_labs-python-bot wenewzhang$
成功激活後,能夠直接執行python或pip了,這時,再也不須要輸入他們的完整路徑了.
建立一個必需包的list
requirements.txt
cryptography==2.4.2 pycparser==2.19 pycryptodome==3.7.2 PyJWT==1.7.1 python-dateutil==2.7.5 PyYAML==3.13 requests==2.21.0 websocket-client==0.54.0
經過pip升級pip包自己, 並安裝必需包.
pip install --upgrade pip pip install -r requirements.txt
wget https://github.com/includeleec/mixin-python3-sdk/raw/master/mixin_ws_api.py wget https://github.com/includeleec/mixin-python3-sdk/raw/master/mixin_api.py wget https://github.com/includeleec/mixin-python3-sdk/raw/master/mixin_config.py
按教程,到mixin.one建立一個APP[tutorial].
生成必要的參數而且記下來
它們將用於mixin_config.py中.
在項目目錄下,建立mixin_config.py,將生成的參數,替換成你的!
mixin_config.py
client_id= 'ed882a39-0b0c-4413-bbd9-221cdeee56bf' client_secret = '8d7ec7b9c8261b6c7bd6309210496ca4b72bce9efc7e49be14a428ce49ff7202' pay_pin = '599509' pay_session_id = 'bd53b6a4-e79a-49e5-ad04-36da518354f6' pin_token = "nVREh0/Ys9vzNFCQT2+PKcDN2OYAUSH8CidwHqDQLOCvokE7o6wtvLypjW9iks/RsnBM6N4SPF/P3bBW254YHGuDZXhitDEWOGkXs7v8BxMQxf+9454qTkMSpR9xbjAzgMXnSyHrNVoBtsc/Y+NvemB3VxPfsCOFHasiMqAa5DU=" private_key = """-----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQCnaoO1SdPxggEpAIUdM/8Ll4FOqlXK7vwURHr4FFi6hnQ1I79g pZSlJdzjr24WcIuNi6kVdXVIpyzZJGXS2I72dpGs5h1jKxL8AWIUVL2axZXqTJNi c4wj6GJ4gDRP2U9I9gae+S/frM6KP8TioV0OcbmrlfrwI0OElLH3363y1wIDAQAB AoGAduaGLi4F8cMkMculvqzcGY57jrQZBGyg6YANWb2Rmr+9LrR5yhkvLe9rJuXE KPm7k0a6SnxGVNguWPWpv4qAVVGAJ0eb8ETXTRO20HlKmcbxfFdDtHBDV3QufNa1 h3mNEsqWDNCDdAm7p/EZwfG2F9+nmeXLfip7R1I72qbK0wkCQQDiJR6NEGVwbj8H K8kRpzY1D9lPqp1ZMrma5AFYGZIb5voTxLjRpYdxQJHi7CCdE1zgqJOXvA3jj/io f7bMIJY7AkEAvYSSC5H+fUKAjyjeCTGJBBKoPDsq+aALAYLWf77sGXE9BBmhhY0l iwmbj8X6/qZtQ0yEzdT/OSdiYL86CcrgFQJBALz/sMzMSzrvqJVhrqWmTdOC72d5 fA+0KRKeQ9FRbZ8MJyymWKA96zhncoVoOsmMCS9pNBC4BhONm4+XTTrEcUkCQQCo DWB8Bg/G/yuExtZtDJHVHL41+rmW9UYNJvoR+TjfLrzOX/QMuyapbfGVwhdZrDaD UN0KsG9JPRVNeQR8HnwpAkACrr9cNp1H1bytHG9a6L+5cVHkRhqqEYWVO41MhgZF 5bIKx5OXCJB2VwY7fjFet2KxTHGfEZt/khjFNZzVX7lN -----END RSA PRIVATE KEY-----"""
須要替換的參數包括: client_id, client_secret, pay_pin, pin_token, pay_session_id, private key.
建立 app-mini.py 文件, 內容以下:
app-mini.py
from mixin_ws_api import MIXIN_WS_API from mixin_api import MIXIN_API import mixin_config import json import time from io import BytesIO import base64 import gzip try: import thread except ImportError: import _thread as thread def on_message(ws, message): inbuffer = BytesIO(message) f = gzip.GzipFile(mode="rb", fileobj=inbuffer) rdata_injson = f.read() rdata_obj = json.loads(rdata_injson) print("-------json object begin---------") print(rdata_obj) print("-------json object end---------") action = rdata_obj["action"] if rdata_obj["data"] is not None: print("data in message:",rdata_obj["data"]) if rdata_obj["data"] is not None and rdata_obj["data"]["category"] is not None: print(rdata_obj["data"]["category"]) if action == "CREATE_MESSAGE": data = rdata_obj["data"] msgid = data["message_id"] typeindata = data["type"] categoryindata = data["category"] userId = data["user_id"] conversationId = data["conversation_id"] dataindata = data["data"] realData = base64.b64decode(dataindata) MIXIN_WS_API.replayMessage(ws, msgid) if 'error' in rdata_obj: return if categoryindata == "PLAIN_TEXT": realData = realData.decode('utf-8') print("dataindata",realData) MIXIN_WS_API.sendUserText(ws, conversationId, userId, realData) if __name__ == "__main__": mixin_api = MIXIN_API(mixin_config) mixin_ws = MIXIN_WS_API(on_message=on_message) mixin_ws.run()
運行 app-mini.py, 記得要先激活「虛擬環境」哦!
(mixin_labs-python-bot) wenewzha:mixin_labs-python-bot wenewzhang$ python app-mini.py ...
若是一切正常,將會有以下提示:
(mixin_labs-python-bot) wenewzha:mixin_labs-python-bot wenewzhang$ python app-mini.py ws open -------json object begin--------- {'id': '1c798948-30eb-11e9-a20e-20c9d08850cd', 'action': 'LIST_PENDING_MESSAGES'} -------json object end---------
在手機安裝 Mixin Messenger,增長機器人爲好友,(好比這個機器人是7000101639) 而後發送消息給它,效果以下!
WebSocket是創建在TCP基礎之上的全雙工通信方式,咱們須要創建一個loop循環來維持通迅。
if __name__ == "__main__": mixin_api = MIXIN_API(mixin_config) mixin_ws = MIXIN_WS_API(on_message=on_message) mixin_ws.run()
每接收到一個消息,須要按消息編號(message_id)給服務器回覆一個"已讀"的消息,避免服務器在機器人從新登入後,再次發送處理過的消息!
MIXIN_WS_API.replayMessage(ws, msgid)
機器人程序完整回覆用戶的信息
if categoryindata == "PLAIN_TEXT": realData = realData.decode('utf-8') print("dataindata",realData) MIXIN_WS_API.sendUserText(ws, conversationId, userId, realData)
Mixin Messenger支持的消息類型不少,具體可到下面連接查看: WebSocket消息類型.
如今你的機器人APP運行起來了,開始玩吧。
完整的代碼在這兒