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'