Python 比特幣 教程 之一:建立機器人

Cover
Mixin Network 是一個免費極速的點對點加密數字貨幣交易系統.
在本章中,你能夠按教程在Mixin Messenger中建立一個bot來接收用戶消息, 學到如何給機器人轉比特幣 或者 讓機器人給你轉比特幣.python

Mixin Network的開發資源彙編git

課程簡介

  1. 建立一個接受消息的機器人
  2. 機器人接受比特幣並當即退還用戶

建立一個接受消息的機器人

經過本教程,你將學會如何用Python建立一個機器人APP,讓它能接受消息.github

Python 3 安裝:

本教程基於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

建立 mixin_labs-python-bot 項目

你首先須要建立項目目錄,初始化"虛擬環境",而後安裝須要的軟件包.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

下載 Mixin Network的python 3的API

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

你好,世界!

建立第一個機器人APP

教程,到mixin.one建立一個APP[tutorial].

生成相應的參數

生成必要的參數而且記下來
它們將用於mixin_config.py中.

mixin_network-keys

在項目目錄下,建立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) 而後發送消息給它,效果以下!

echo message

源代碼解釋

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運行起來了,開始玩吧。

完整的代碼在這兒

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息