example.rb in tgbot-0.1.0 vs example.rb in tgbot-0.1.1

- old
+ new

@@ -1,34 +1,110 @@ +require 'json' +require 'faraday' require './helper' save_pid require 'tgbot' -@garage = load_data.shuffle - +Garage = load_data.shuffle +Cache = {} TOKEN = Tgbot.run TOKEN, proxy: 'https://127.0.0.1:1080' do |bot| bot.start do - log "this is \e[33m#{bot.name}\e[32m, master.", 2 + log "\e[33m#{bot.name}\e[32m, at your service.", 2 end bot.finish do - log "byebye.", 1 + log "byebye.", 2 end - bot.get 'drive' do |x, update| - pic = @garage.pop - log ">> Sending #{File.basename(pic)} to @#{update.message.from.username} ##{update.id}", 6 - update.reply_photo pic, caption: File.basename(pic, '.*') + + bot.get 'start' do + send_message(<<~EOF, parse_mode: 'Markdown') + ``` + start : 显示此帮助信息 + drive : 随机返回一张车库里的图 + 对该图回复 “原图” : 返回原图 + exchange 100 CNY to JPY : 汇率转换 + register : 添加自定义功能(会先提交给作者) + ``` + EOF end + + bot.get 'drive' do + pic = Garage.pop + log ">> Sending #{File.basename(pic)} to @#{message.from.username} ##{id}", 6 + bytes = File.size pic + size = hsize bytes + reply "正在发车 (#{size} #{htime(bytes / 30720)})" + x = reply_photo pic, caption: File.basename(pic, '.*') + if self.done = x['ok'] + Cache["drive_#{x['result']['message_id']}"] = pic + end + self.done! if self.count > 1 + end + bot.get '原图' do + x = message&.reply_to_message&.message_id + pic = Cache["drive_#{x}"] + unless pic + reply '没找到原图,重开' + next + end + log ">> Sending original #{File.basename(pic)} to @#{message.from.username} ##{id}", 6 + reply_document pic + end + + bot.get 'exchange' do + x = text&.match /([-+]?[1-9]\d*(\.\d+)?)\s*([A-Z]+)\s*to\s*([A-Z]+)/ + unless x + reply 'Usage: exchange 100 CNY to JPY' + next + end + n, f, t = x.values_at 1, 3, 4 + n = Float(n) rescue next + Cache["exchange_#{f}"] ||= JSON.parse Faraday.get("http://api.fixer.io/latest?base=#{f}").body + next unless Cache["exchange_#{f}"] && !Cache["exchange_#{f}"]['error'] + next unless Cache["exchange_#{f}"]['rates'][t] + n *= Cache["exchange_#{f}"]['rates'][t] + t = Cache["exchange_#{f}"]['date'] + reply "#{'%.2f' % n} (#{t})" + end + bot.before do |update| - log ">> Processing ##{update.id} #{bot.timeout}" + log ">> Processing ##{update.id}" + log "@#{update.message&.from.username}: #{update.text}", 3 end bot.after do |update| if update.done? log "=> Success ##{update.id}", 2 else log "?> Retry ##{update.id}", 3 end end + bot.get 'register' do + e = message&.entities&.find { |e| e.type == 'pre' } + if e.nil? + send_message(<<~EOF) + register <功能名> + ``` + get /command/ do |matched| + # your code here + end + ``` + EOF + next + end + open 'register.rb', 'a' do |f| + f.puts text[e.offset, e.length] + end + reply '脚本已备分' + end + + bot.get 'coin' do + send_message Array.new(text&.match(/\d+/)&.to_s.to_i || 1){ ['🌞', '🌚'].sample }.join + end + bot.get 'roll' do + send_message rand(text&.match(/\d+/)&.to_s.to_i || 100).to_s + end + end -save_data @garage +save_data Garage delete_pid \ No newline at end of file