Mixin Network 是一个免费的 极速的端对端加密数字货币交易系统.

在本章中,你可以按教程在Mixin Messenger中创建一个bot来接收用户消息, 学到如何给机器人转比特币 或者 让机器人给你转比特币.

课程简介

创建一个接受消息的机器人

通过本教程,你将学会如何用Ruby创建一个机器人APP,让它能接受消息.

Ruby 环境安装:

本教程的程序基于 Ruby 开发.

On macOS

brew update

brew install rbenv

rbenv install 2.6.3

rbenv shell 2.6.3

On Ubuntu

sudo apt update

sudo apt install git curl libssl-dev libreadline-dev zlib1g-dev autoconf \

bison build-essential libyaml-dev libreadline-dev libncurses5-dev libffi-dev libgdbm-dev

curl -sL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-installer | bash -

echo 'export PATH=/root/.rbenv/bin:$PATH' >> ~/.bashrc

echo 'eval "$(rbenv init -)"' >> ~/.bashrc

source ~/.bashrc

rbenv install 2.6.3

rbenv shell 2.6.3

检查安装情况!

wenewzha:~ wenewzhang$ rbenv shell 2.6.3

wenewzha:minecraft wenewzhang$ ruby -v

ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin18]

安装依赖包

本教程依赖 faye-websocket 与 mixin_bot.

gem install faye-websocket

gem install mixin_bot

创建你的项目

到你的工作文档中,创建一个目录,并取一个名字,比如:mixin_labs-ruby-bot

mkdir mixin_labs-ruby-bot

mixin_labs-ruby-bot

创建第一个机器人APP

按下面的提示,到mixin.one创建一个APPtutorial.

生成相应的参数

记下这些生成的参数

它们将用于config.yml中.

在项目目录下,创建config.yml,将生成的参数,替换成你的!

config.yml

`> config.yml

MIXIN_CLIENT_ID: 'a1ce2967-a534-417d-bf12-c86571e4eefa'

MIXIN_CLIENT_SECRET: 'a3f52f6c417f24bfdf583ed884c5d0cb489320c58222b061298e4a2d41a1bbd7'

MIXIN_DEFAULT_SCOPE: 'PROFILE:READ+PHONE:READ+ASSETS:READ'

MIXIN_PIN_CODE: '457965'

MIXIN_SESSION_ID: '26ed1f52-a3b4-4cc3-840f-469d3f19b10b'

MIXIN_PIN_TOKEN: '0t4EG7tJerZYds7N9QS0mlRPCYsEVTQBe9iD1zNBCFN/XO7XEB87ypsCDWfRmDiZ7izzB/nokuMJEu6RJShMHCdIwYISU9xckA/8hIsRVydvoP14G/9kRidMHl/3RPLDMK6U2yCefo2BH0kQdbcRDxpiddqrMc4fYmZo6UddU/A='

MIXIN_PRIVATE_KEY: |

-----BEGIN RSA PRIVATE KEY-----

MIICXAIBAAKBgQDaSPE8Cu18xzr8MOcgJx8tQnRdlS7c6JVs23497IGdIybIUYmZ

8zvgrFozpGjQYz2ayRDMWUQd/wm7e0Tf7n4bVCmQfkk72usAHX6pNA4HUeTeTmDT

sZQKdVx0K84Y3u512cAi5artnUjIsFRPP/LhAX0ujdgNMWIcHrMRh77s1wIDAQAB

AoGAVPW3Dwuhy8MvriDKlLUlaVRIPnRmPQ05u5ji1e9Ls4GPAsDZsdX+JEBxC1Ce

ix1VSP2hUCgeXx55B0O/VvlYk0pfogrxDgOw2dP04uboMG7tSE4TZK8J9zFPUrE0

wizFmbkgV2OEw33r00FqEhr0KnB9kXOzB5BvKN/FVyXui+ECQQDz1x3hOypW2kM9

uOqjQyg55VDkkXVZ8RgOmVd24MfkDjRauj1oGgLUWvINzhmXN5m84IhlOz1hgEuO

enHOpMmDAkEA5SuVeRhBZofUoaRbFxWL4jAN6+uuxFxZ0gCc9l4gwFkQp0RbEw/S

tiX9Cl06JR2oc2FBlaO5Vi1u8XfxOSUzHQJBANijfKaJHFrB3A/QZJbcqbaWaEJK

gYqBSzBdSHoTx0R04krhQIFm6rCkhH2DaPUSrwJCMqxN74DarUZOvyIrAeUCQH2F

ecFx/6BhFZ3Tn/Ds5ElneLiXxonW63uSymZG+DlijzSOxDOUnx0VgZuDpK1fqTxJ

MNr9ai5BhFrOD1n1fiECQBafDxsfFQv3w6j5/2PL54DhddGo50FzGxYR1LlttdVI

Q04EytqK7grDDS9PsfeXqdUo0D3NMSJ0BYs/kDsqGSc=

-----END RSA PRIVATE KEY-----

需要替换的参数包括: client_id, client_secret, and the pin, pin token, session_id, private key.

经典的Hello world

require 'faye/websocket'

require 'eventmachine'

require 'json'

require 'zlib'

require 'mixin_bot'

require 'yaml'

yaml_hash = YAML.load_file('./config.yml')

MixinBot.client_id = yaml_hash["MIXIN_CLIENT_ID"]

MixinBot.session_id = yaml_hash["MIXIN_SESSION_ID"]

MixinBot.client_secret = yaml_hash["MIXIN_CLIENT_SECRET"]

MixinBot.pin_token = yaml_hash["MIXIN_PIN_TOKEN"]

MixinBot.private_key = yaml_hash["MIXIN_PRIVATE_KEY"]

access_token = MixinBot.api.access_token("GET","/","")

puts access_token

authorization = format('Bearer %s', access_token)

EM.run {

ws = Faye::WebSocket::Client.new('wss://blaze.mixin.one/', ["Mixin-Blaze-1"],

:headers => { 'Authorization' => authorization }

)

ws.on :open do |event|

p [:open]

ws.send(MixinBot.api.list_pending_message)

end

ws.on :message do |event|

p [:message]

data = event.data

msg = MixinBot.api.read_message(data)

jsmsg = JSON.parse msg

# p jsmsg

# p jsmsg["data"]

if jsmsg["action"] == "CREATE_MESSAGE" && jsmsg["data"] != nil

msgid = jsmsg["data"]["message_id"]

ws.send(MixinBot.api.acknowledge_message_receipt(msgid))

if jsmsg["data"]["category"] == "PLAIN_TEXT"

conversation_id = jsmsg["data"]["conversation_id"]

decoded_msg = Base64.decode64 jsmsg["data"]["data"]

p decoded_msg

reply_msg = MixinBot.api.plain_text_message(conversation_id, decoded_msg)

ws.send(reply_msg)

end

if jsmsg["data"]["category"] == "SYSTEM_ACCOUNT_SNAPSHOT"

jsdata = JSON.parse (Base64.decode64(jsmsg["data"]["data"]))

p jsdata

end

end

end

ws.on :error do |event|

p [:error]

end

ws.on :close do |event|

p [:close, event.code, event.reason]

ws = nil

end

}

编译与运行

执行 ruby websocket_mixin_bot.rb 程序

ruby websocket_mixin_bot.rb

如果一切正常,显示如下:

[:open]

[:message]

{"id"=>"2e13092f-4048-488f-82bc-f5ee9f984002", "action"=>"LIST_PENDING_MESSAGES"}

在手机安装 Mixin Messenger,增加机器人为好友,(比如这个机器人是7000101639) 然后发送消息给它,效果如下!

Mixin Messenger支持的消息类型很多,具体可到下面链接查看: WebSocket消息类型.

源代码解释

每接收到一个消息,需要按消息编号(message_id)给服务器回复一个"已读"的消息,避免服务器在机器人重新登入后,再次发送处理过的消息!

ws.send(MixinBot.api.acknowledge_message_receipt(msgid))

完成

现在你的机器人APP运行起来了,你打算如何改造你的机器人呢?

完整的代码在这儿

mixin network_基于Mixin Network的Ruby比特币开发教程相关推荐

  1. mixin network_基于Mixin Network的Go语言比特币开发教程 : 用 Mixin Messenger 机器人接受和发送比特币...

    基于Mixin Network的Go语言比特币开发教程 : 用 Mixin Messenger 机器人接受和发送比特币 在 上一篇教程中, 我们创建了自动回复消息的机器人,当用户发送消息"H ...

  2. mixin network_基于Mixin Network的PHP比特币开发教程: 机器人接受比特币并立即退还用户...

    在 上一篇教程中, 我们创建了自动回复消息的机器人,当用户发送消息"Hello,World!"时,机器人会自动回复同一条消息! 按本篇教程后学习后完成后,你的机器人将会接受用户发送 ...

  3. 基于Mixin Network的PHP比特币开发教程 之一:创建机器人

    英文原文 Mixin Network 是一个免费的 极速的端对端加密数字货币交易系统. 在本章中,你可以按教程在Mixin Messenger中创建一个bot来接收用户消息, 学到如何给机器人转比特币 ...

  4. 基于以太坊的智能合约开发教程Solidity modifier

    基于以太坊的智能合约开发教程Solidity modifier pragma solidity ^0.4.0;contract modifierTest{address owner;uint publ ...

  5. 视频教程-基于python的微信公众号开发教程-微信开发

    基于python的微信公众号开发教程 微信企业号星级会员.10多年软件从业经历,国家级软件项目负责人,主要从事软件研发.软件企业员工技能培训.已经取得计算机技术与软件资格考试(软考)--"信 ...

  6. 基于python的微信公众号开发教程_基于python的微信公众号开发教程

    应广大python学员的期盼,九宝老师精心制作的"基于python的微信公众号开发"视频教程即将上线. 该课程秉承九宝培训一贯的"简单.高效.快速"的讲课原则, ...

  7. [Minecraft]基于Forge的1.8.9MOD开发教程——第一讲:搭建开发环境

    (第一次写教程,有点小紧张呢..) 作者的话 我一开始学习MOD开发时,也曾在各大网站搜索过一些教程,感觉国内的MOD开发教程是真心的少:CSDN没找到,优酷.爱奇艺.腾讯.B站也几乎没有(除了优酷的 ...

  8. 基于chatgpt的社区教育网站开发教程

    文章目录 社区教育网站教程 网站架构 技术栈 实现步骤与自主学习资源 社区教育网站教程 社区教育网站是一个基于Web3.0和教育4.0理念的在线教育平台,它旨在为用户提供一个去中心化.开放.自主和协作 ...

  9. 基于C#的ArcEngine二次开发教程(11):矢量数据属性查询接口介绍及实现源码

    目录 1 使用ArcMap进行矢量数据属性查询 示例1:根据Name字段进行查询 示例2:根据KIND字段进行多条记录查询 2 基于AE的矢量数据属性查询的实现 2.1 IFeatureLayer 2 ...

最新文章

  1. micropython arduino选哪个好_玩转GPIO之ESP32基于MicroPython与Arduino的计算性能测试
  2. 最短路问题的原始对偶算法形式
  3. linux操作系统重启后 解决nginx的pid消失问题
  4. linux 死锁分析
  5. 分布式锁的三种实现的对比
  6. python工厂模式 django_python设计模式-工厂方法模式
  7. 用soapUI测试webservice
  8. python/socket编程之粘包
  9. [导入]C#面向对象设计模式纵横谈(18):(行为型模式) Iterator 迭代器模式.zip(8.04 MB)...
  10. 微软云计算介绍与实践(实践之三十五)
  11. Mybatis_day2_Mybatis的参数深入
  12. 关于stm32f407搭载wifi模块_华为智能体脂秤WiFi版体验:家庭标配的智能家居
  13. 廖雪峰Python教程学习笔记
  14. python编程手册 中文pdf_《Python学习手册(第4版)》高清中文PDF(《Learning Python》)...
  15. CAN Ape 标定与诊断
  16. 常见API漏洞解释以及应用层解决方案
  17. 基于jsp、ssm企业工资管理系统
  18. 手机反编译java源码,Android反编译(一)之反编译JAVA源码
  19. QQ大厅游戏 大家来找茬辅助
  20. 我的世界java版如何加披风_我的世界披风怎么导入

热门文章

  1. 前端学HTTP之网关、隧道和中继
  2. Ubuntu12.04安装Mac OSX Yosemite
  3. 笔记-【6】-JS中JSON的基础理解!
  4. Linux下正则表达式和grep命令的使用
  5. keyCode(ASCII)与键盘按键对照表
  6. postgres 备份 恢复
  7. vector机器人 PHOTOS TAKEN BY VECTOR 由 VECTOR 拍摄的照片
  8. 指定用户 启动 进入 docker容器
  9. 国外开源威胁情报feed站点 简介
  10. 数字货币钱包 jaxx的使用