|
require 'net/http' |
|
require 'uri' |
|
require 'json' |
|
|
|
PEERBET_API_BASE = "https://peerbet.org/api.php?method=" |
|
|
|
# ~~ |
|
# Full docs about all fields: |
|
# https://peerbet.org/developers.php |
|
# ~~ |
|
|
|
class Peerbet |
|
attr_accessor :use_ssl, :key, :latest_error |
|
@@use_ssl = true |
|
@@key = nil |
|
@@latest_error = nil |
|
|
|
# Initializer (Triggers a login if username & password are not empty) |
|
# |
|
# Example: |
|
# >> pb = Peerbet.new "Username", "Password" |
|
# >> pb = Peerbet.new |
|
# => nil |
|
# |
|
# Arguments: |
|
# [username]: (String) |
|
# [password]: (String) |
|
# |
|
# Limit: |
|
# 0/5 seconds |
|
def initialize username = nil, password = nil |
|
self.login username, password if !username.nil? and !password.nil? |
|
end |
|
|
|
# Login |
|
# |
|
# Example: |
|
# >> pb.login "Username", "Password" |
|
# => true |
|
# |
|
# Arguments: |
|
# username: (String) |
|
# password: (String) |
|
# |
|
# Limit: |
|
# 5 seconds |
|
def login username, password |
|
data = read_url(PEERBET_API_BASE+"login&username=#{username}&password=#{password}") |
|
if data["success"] == 1 |
|
@@key = data["key"] |
|
true |
|
end |
|
false |
|
end |
|
|
|
# Create new account |
|
# |
|
# Example: |
|
# >> pb.create_account "Username", "[email protected]", "Password" |
|
# => true |
|
# |
|
# Arguments: |
|
# username: (String) |
|
# email: (String) |
|
# password: (String) |
|
# |
|
# Limit: |
|
# 5 seconds |
|
def create_account username, email, password |
|
true if read_url(PEERBET_API_BASE+"signup&username=#{username}&email=#{email}&password=#{password}")["success"] == 1 |
|
false |
|
end |
|
|
|
# Get current user info |
|
# |
|
# Example: |
|
# >> pb.get_user_info |
|
# => {"username":"tester","balance":"0.2126948","spent_total":"0.00000000","won_total":"0.00000000","deposits_total":"0.00000000","withdrawals_total":"0.00000000","profit":0,"profit_today":0} |
|
# |
|
# Arguments: |
|
# stats: (Boolean) shows extra stats (ex. "spent_total") |
|
# |
|
# Limit: |
|
# none |
|
def get_user_info stats = false |
|
add = "&stats=1" if stats == true |
|
if !@@key.nil? |
|
read_url(PEERBET_API_BASE+"getuserinfo&key=#{@@key}#{add}") |
|
end |
|
end |
|
|
|
# Get current user balance |
|
# |
|
# Example: |
|
# >> pb.get_balance |
|
# => 0.123123 |
|
# |
|
# Limit: |
|
# none |
|
def get_balance |
|
if !@@key.nil? |
|
read_url(PEERBET_API_BASE+"getuserinfo&key=#{@@key}")["balance"].to_i |
|
end |
|
end |
|
|
|
# Get current user deposit adress |
|
# |
|
# Example: |
|
# >> pb.get_deposit_address |
|
# => 0.123123 |
|
# |
|
# Limit: |
|
# none |
|
def get_deposit_address |
|
if !@@key.nil? |
|
read_url(PEERBET_API_BASE+"getdepositaddress&key=#{@@key}")["address"].to_s |
|
end |
|
end |
|
|
|
# Get all raffles |
|
# |
|
# Example: |
|
# >> pb.get_raffles |
|
# => [{ 'raffle_id': 123123, ... }, { .. }] |
|
# |
|
# Limit: |
|
# 1 second |
|
def get_raffles |
|
read_url(PEERBET_API_BASE+"getactiveraffles") |
|
end |
|
|
|
# Each raffle (block) |
|
# |
|
# Example: |
|
# >> pb.each_raffle do |raffle| |
|
# >> p raffle |
|
# >> end |
|
# => { 'raffle_id': 123123, ... } |
|
# => { 'raffle_id': 134624, ... } |
|
# |
|
# Limit: |
|
# 1 second |
|
def each_raffle |
|
read_url(PEERBET_API_BASE+"getactiveraffles").each do |raffle| |
|
yield raffle |
|
end |
|
end |
|
|
|
# Get raffle info |
|
# |
|
# Example: |
|
# >> pb.get_raffle_info raffle_id |
|
# => { 'raffle_id': 123123, ... } |
|
# |
|
# Arguments: |
|
# raffle_id: (Integer) |
|
# |
|
# Limit: |
|
# 1 second |
|
def get_raffle_info raffle_id |
|
if !@@key.nil? |
|
read_url(PEERBET_API_BASE+"getraffleinfo&raffle=#{raffle_id}&key=#{@@key}") |
|
end |
|
end |
|
|
|
# Get current user raffle count |
|
# |
|
# Example: |
|
# >> pb.get_current_user_raffle_count |
|
# => {"count":"42"} |
|
# |
|
# Limit: |
|
# none |
|
def get_current_user_raffle_count |
|
read_url(PEERBET_API_BASE+"getmyrafflecount&key=#{@@key}") |
|
end |
|
|
|
# Get current user raffles |
|
# |
|
# Example: |
|
# >> pb.get_current_user_raffles |
|
# => [{ 'raffle_id': 123123, ... }, { .. }] |
|
# |
|
# Arguments: |
|
# page: (Integer) [default: 0] |
|
# |
|
# Limit: |
|
# 1 second |
|
def get_current_user_raffles page = 0 |
|
read_url(PEERBET_API_BASE+"getmyraffles&key=#{@@key}") |
|
end |
|
|
|
# Create new raffle |
|
# |
|
# Example: |
|
# >> pb.create_raffle |
|
# => [{ 'raffle_id': 123123, ... }, { .. }] |
|
# |
|
# Arguments: |
|
# tickets: (Integer) |
|
# price: (Float) |
|
# [instant]: (Integer) 1 = yes, 0 = no [default: 1] |
|
# [password]: (String) [default: none] |
|
# [expire]: (Integer) in days [default: none] |
|
# |
|
# Limit: |
|
# 1 second |
|
def create_raffle tickets, price, instant = 1, password = nil, expire = nil |
|
_call = PEERBET_API_BASE+"createraffle&key=#{@@key}&tickets=#{tickets}&price=#{price}&instant=#{instant}" |
|
_call += "&password=#{password}" if !password.nil? |
|
_call += "&expire=#{expire}" if !expire.nil? |
|
data = read_url(_call) |
|
if !data["raffle_id"].nil? |
|
data["raffle_id"].to_i |
|
end |
|
false |
|
end |
|
|
|
# Buy ticket(s) |
|
# |
|
# Example: |
|
# >> pb.buy_tickets 123123, 2 |
|
# => true |
|
# |
|
# Arguments: |
|
# raffle_id: (Integer) |
|
# count: (Integer) |
|
# |
|
# Limit: |
|
# 1 second |
|
def buy_tickets raffle_id, count |
|
data = read_url(PEERBET_API_BASE+"buytickets&key=#{@@key}&raffle=#{raffle_id}&tickets=#{count}") |
|
if !data["success"].nil? and data["success"].to_i === 1 |
|
true |
|
end |
|
false |
|
end |
|
|
|
# Refund ticket(s) |
|
# |
|
# Example: |
|
# >> pb.refund_tickets 123123 |
|
# => true |
|
# |
|
# Arguments: |
|
# raffle_id: (Integer) |
|
# |
|
# Limit: |
|
# 1 second |
|
def refund_tickets raffle_id |
|
data = read_url(PEERBET_API_BASE+"refund&key=#{@@key}&raffle=#{raffle}") |
|
if !data["success"].nil? and data["success"].to_i === 1 |
|
true |
|
end |
|
false |
|
end |
|
|
|
# Authorize player for private raffle |
|
# |
|
# Example: |
|
# >> pb.authorize 123123, "password" |
|
# => true |
|
# |
|
# Arguments: |
|
# raffle_id: (Integer) |
|
# password: (String) |
|
# |
|
# Limit |
|
# 5 seconds |
|
def authorize raffle_id, password |
|
data = read_url(PEERBET_API_BASE+"authorize&key=#{@@key}&raffle=#{raffle}&password=#{password}") |
|
if !data["success"].nil? and data["success"].to_i === 1 |
|
true |
|
end |
|
false |
|
end |
|
|
|
# Transfer funds to another account |
|
# |
|
# Example: |
|
# >> pb.transfer "AccountName", 0.0111 |
|
# => true |
|
# |
|
# Arguments: |
|
# recipient: (String) |
|
# amount: (Float) |
|
# |
|
# Limit |
|
# 1 second |
|
def transfer recipient, amount |
|
data = read_url(PEERBET_API_BASE+"transfer&key=#{@@key}&recipient=#{recipient}&amount=#{amount}") |
|
if !data["success"].nil? and data["success"].to_i === 1 |
|
true |
|
end |
|
false |
|
end |
|
|
|
# Get all chat messages |
|
# |
|
# Example: |
|
# >> pb.get_chat |
|
# => [{ ... }, { ... }] |
|
# |
|
# Arguments: |
|
# lastmessageid: (Integer) Start list from here |
|
# |
|
# Limit |
|
# 1 second |
|
def get_chat lastmessageid = nil |
|
last = "" |
|
last = "&lastmessageid=#{lastmessageid}" if !lastmessageid.nil? |
|
read_url(PEERBET_API_BASE+"getchatmessages&key=#{@@key}#{last}") |
|
end |
|
|
|
# Each chat message |
|
# |
|
# Example: |
|
# >> pb.each_chat { |msg| p msg } |
|
# => { ... } |
|
# |
|
# Arguments: |
|
# lastmessageid: (Integer) Start list from here |
|
# |
|
# Limit |
|
# 1 second |
|
def each_chat lastmessageid |
|
last = "" |
|
last = "&lastmessageid=#{lastmessageid}" if !lastmessageid.nil? |
|
read_url(PEERBET_API_BASE+"getchatmessages&key=#{@@key}#{last}").each do |msg| |
|
yield msg |
|
end |
|
end |
|
|
|
# Post chat msg |
|
# |
|
# Example: |
|
# >> pb.post "Yay ich bin kein bot" |
|
# >> pb.post "Aber ich bin ein bot", true |
|
# => true |
|
# |
|
# Arguments: |
|
# message: (String) maximal 140 chars |
|
# bot: (Boolean) |
|
def post message, bot = 1 |
|
if bot == true |
|
bot = 1 |
|
else |
|
bot = 0 |
|
end |
|
|
|
data = read_url(PEERBET_API_BASE+"postchatmessage&key=#{@@key}&message=#{message}&bot=#{bot}") |
|
if !data["message_id"].nil? |
|
data["message_id"].to_i |
|
end |
|
false |
|
end |
|
|
|
# Private message |
|
# |
|
# Example: |
|
# >> pb.private_post "Yay ich bin kein bot" |
|
# >> pb.private_post "Aber ich bin ein bot", true |
|
# => true |
|
# |
|
# Arguments: |
|
# receiver:(String) Other account |
|
# message: (String) maximal 140 chars |
|
# bot: (Boolean) |
|
def private_post receiver, msg, bot |
|
self.post "%#{receiver}, #{msg}", bot |
|
end |
|
|
|
private |
|
|
|
# Reads url into JSON object (http & https, collects last error) |
|
# |
|
# Example: |
|
# >> self.read_url("https://meh.meh/meh.json") |
|
# => { ... } |
|
def read_url url |
|
if @@use_ssl |
|
uri = URI.parse(url) |
|
http = Net::HTTP.new(uri.host, uri.port) |
|
http.use_ssl = true |
|
http.verify_mode = OpenSSL::SSL::VERIFY_NONE |
|
data = JSON.parse( http.get(uri.request_uri).body ) |
|
else |
|
data = JSON.parse( Net::HTTP.get(URI.parse(url.gsub('https://','http://'))) ) |
|
end |
|
if !data["error"].nil? |
|
@@latest_error = data["error"] |
|
end |
|
data |
|
end |
|
end |