exe/cqhttp-dbus in CQHTTP-1.0.1 vs exe/cqhttp-dbus in CQHTTP-1.1.0

- old
+ new

@@ -14,37 +14,87 @@ dbus_method :call, 'in func:s, in args:s' do |func, args| @cqhttp.send func, JSON.parse(args, symbolize_names: true) end dbus_signal :message, 'message_type:s, json:s' + %i[private group get_group_list].each do |i| + dbus_signal i, 'json:s' + end dbus_signal :event, 'event:s, json:s' + %i[ + group_upload + group_admin + group_decrease + group_increase + friend_add + ].each do + dbus_signal i, 'json:s' + end dbus_signal :friend_request, 'json:s' dbus_signal :join_request, 'json:s' dbus_signal :invite_request, 'json:s' dbus_signal :all, 'json:s' dbus_signal :unknow, 'json:s' end end -def cqhttp2dbus(c, obj) - j = c.json - obj.all j.to_json - case j['post_type'] - when 'message' then obj.message j['message_type'], j.to_json - when 'event' then obj.event j['event'], j.to_json - when 'request' - case j['request_type'] - when 'friend' then obj.friend_request j.to_json +# case signal +class Case + def initialize(info, obj) + @info = info + @obj = obj + @json = gen_json + end + + def gen_json + JSON.pretty_generate @info + end + + def send_json(name) + @obj.send name, @json + end + + def unknow + @obj.send_json :unknow + end + + def run + send_json :all + case @info['post_type'] + when 'message' then message + when 'event' then event + when 'request' then request + else unknow + end + end + + def message + @obj.message @info['message_type'], @json + send_json @info['message_type'] + end + + def event + @obj.event @info['event'], @json + send_json @info['event'] + end + + def request + case @info['request_type'] + when 'friend' then send_json :friend_request when 'group' case j['sub_type'] - when 'add' then obj.join_request j.to_json - when 'invite' then obj.invite_request j.to_json - else obj.unknow j.to_json + when 'add' then send_json :join_request + when 'invite' then send_json :invite_request + else unknow end - else obj.unknow j.to_json + else unknow end - else obj.unknow j.to_json end +end + +def cqhttp2dbus(c, obj) + j = c.json + Case.new(j, obj).run end bus = DBus::SessionBus.instance service = bus.request_service 'org.dastudio.qq' obj = CQHTTP2DBus.new '/org/dastudio/qq'