Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/an-lee/mixin_bot
A simple API wrapper for Mixin Network in Ruby
https://github.com/an-lee/mixin_bot
api-wrapper gem mixin mixin-sdk-ruby rails ruby
Last synced: 23 days ago
JSON representation
A simple API wrapper for Mixin Network in Ruby
- Host: GitHub
- URL: https://github.com/an-lee/mixin_bot
- Owner: an-lee
- License: mit
- Created: 2018-09-13T10:20:34.000Z (about 6 years ago)
- Default Branch: main
- Last Pushed: 2024-05-23T07:38:57.000Z (6 months ago)
- Last Synced: 2024-05-23T07:49:11.812Z (6 months ago)
- Topics: api-wrapper, gem, mixin, mixin-sdk-ruby, rails, ruby
- Language: Ruby
- Homepage:
- Size: 5.92 MB
- Stars: 12
- Watchers: 3
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: MIT-LICENSE
Awesome Lists containing this project
- awesome-mixin - Mixin_bot (Ruby) - A simple API wrapper for Mixin Network in Ruby, used in Prsdigg. (SDK / 3rd-party SDK)
README
# MixinBot
[![CI](https://github.com/an-lee/mixin_bot/actions/workflows/ci.yml/badge.svg)](https://github.com/an-lee/mixin_bot/actions/workflows/ci.yml)
An API wrapper for [Mixin Network](https://developers.mixin.one/docs/api-overview)
## Installation
Add to gemfile, and `bundle install`
```ruby
gem 'mixin_bot'
```Or
```shell
gem install mixin_bot
```## Usage
### CLI
```bash
Commands:
mixinbot api PATH -k, --keystore=KEYSTORE # request PATH of Mixin API
mixinbot decodetx TRANSACTION # decode raw transaction
mixinbot encrypt PIN -k, --keystore=KEYSTORE # encrypt PIN using private key
mixinbot generatetrace HASH # generate trace ID from Tx hash
mixinbot help [COMMAND] # Describe available commands or one specific command
mixinbot nftmemo -c, --collection=COLLECTION -h, --hash=HASH -t, --token=N # memo for mint NFT
mixinbot unique UUIDS # generate unique UUID for two or more UUIDs
mixinbot version # Distay MixinBot versionOptions:
-a, [--apihost=APIHOST] # Specify mixin api host
# Default: api.mixin.one
-r, [--pretty], [--no-pretty] # Print output in pretty
# Default: true
```Example:
```bash
$ mixinbot api /me -k ~/.mixinbot/keystore.json
```### Initialize params
To use MixinBot api, you should set the keys first.
```ruby
MixinBot.configure do
app_id = '25696f85-b7b4-4509-8c3f-2684a8fc4a2a'
client_secret = 'd9dc58107bacde671...'
session_id ='25696f85-b7b4-4509-8c3f-2684a8fc4a2a'
server_public_key = 'b0pjBUKI0Vp9K+NspaL....'
session_private_key = '...'
end
```### Call mixin apis
Then you can use MixinBot by call `MixinBot.api`, for example
```ruby
# get the bot profile
MixinBot.api.me# get assets of the bot
MixinBot.api.assets# transfer asset to somebody
MixinBot.api
.create_transfer(
'123456', # pin_code
asset_id: '965e5c6e-434c-3fa9-b780-c50f43cd955c', # the asset uuid to transfer
opponent_id: '6ae1c7ae-1df1-498e-8f21-d48cb6d129b5', # receiver's mixin uuid
amount: 0.00000001, # amount
memo: 'test from MixinBot', # memo, 140 length at max
trace_id: '0798327a-d499-416e-9b26-5cdc5b7d841e' # a uuid to trace transfer
)# etc
```### Connect Mixin Blaze
Your bot can receive/send messages from/to any users in Mixin Network, including all users in Mixin Messenger by connecting to Mixin Blaze.
With MixinBot, doing this is super easy.
```ruby
# run it in a EventMachine
EM.run {
MixinBot.api.start_blaze_connect do
# do something when the websocket connected
def on_open(blaze, _event)
p [Time.now.to_s, :on_open]# send the list_pending_message to receive messages
blaze.send list_pending_message
end# do something when receive message
def on_message(blaze, event)
raw = JSON.parse ws_message(event.data)
p [Time.now.to_s, :on_message, raw&.[]('action')]blaze.send acknowledge_message_receipt(raw['data']['message_id']) unless raw&.[]('data')&.[]('message_id').nil?
end# do something when websocket error
def on_error(blaze, event)
p [Time.now.to_s, :on_error]
end# do something when websocket close
def on_close(blaze, event)
p [Time.now.to_s, :on_close, event.code, event.reason]
end
end
}
```### Multiple Bot management
If you need to manage multiple mixin bot, you can config like this.
```ruby
bot1_api = MixinBot::API.new(
app_id: '...',
client_secret: '...',
session_id: '...',
server_public_key: '...',
session_private_key: '...'
)bot2_api = MixinBot::API.new(
app_id: '...',
client_secret: '...',
session_id: '...',
server_public_key: '...',
session_private_key: '...'
)bot1_api.me
bot2_api.me
```## More Example
See in the `Spec` files.
For WebSocket use case, see in `examples/blaze.rb`.
## Test
Clone the project:
```shell
git clone https://github.com/an-lee/mixin_bot
```Update the spec config.yml to your own Mixin App(create in [developers.mixin.one](https://developers.mixin.one/dashboard)).
```shell
cd mixin_bot
mv spec/config.yml.example spec/config.yml
```Run the test.
```shell
rake
```## References
- [Mixin Network Document](https://developers.mixin.one/api)
- [mixin_client_demo (python)](https://github.com/myrual/mixin_client_demo)
- [mixin-node (nodejs)](https://github.com/virushuo/mixin-node)## License
This project rocks and uses MIT-LICENSE.