matrix_qq 0.3.3 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7486c179e93ec5ece200ddafc628d1b3cf91390d
4
- data.tar.gz: f4c8221bb89a500fe2884f0a540917907d75204a
3
+ metadata.gz: b10cb473c23ae57054f29f317828d51d3e0cc3a0
4
+ data.tar.gz: 84d52dfe120fd743b2bd54e12699ba07a478c97e
5
5
  SHA512:
6
- metadata.gz: 6993e4a6baefc9b8d5323f266bc2c5db18c6bcf135b76a873547ca5acf93c204e9bcae760470e351bac33d74c4dd808a604b415f52c70d89b7aa0ed9ed3fedeb
7
- data.tar.gz: 1f7750b15ea76ce2f068e18db8087957b0c23a9c98090df7c65326d8144bfb9701802aad69e7df64954e008f862fe6e1fe673855a254771bc8716f73c2e3e742
6
+ metadata.gz: 364aae41c69bc800fff31dfe978b3fffaae1d4343b6a0370d4d494a50b1dcd85d428891dce95bd6fe7eb8af3e33fd6293d9c2d541c1a024e2f4a877f29820744
7
+ data.tar.gz: cad73b838a627235490481f37284c8cfa4440b8a1d640119576f9cbbd2073453e6987871698f9f9ca1a7941fc971db10321815eaa279020eb07d6fb93afff93a
data/CHANGELOG.yaml CHANGED
@@ -1,8 +1,16 @@
1
1
  # Notice: Incompatible items start with `!`
2
2
 
3
- 0.3.3:
3
+ 0.4.0:
4
4
  Feature:
5
5
  - msgtype rich
6
+ - matrix forword support all
7
+ - all matrix can formord to group
8
+ - group forword support all
9
+ - all group can formord to matrix
10
+ - utils:
11
+ - intercept?
12
+ Change:
13
+ - merge text if haven't emoji
6
14
  0.3.2:
7
15
  Feature:
8
16
  - Emoji support
@@ -14,7 +22,7 @@
14
22
  - Matrix send message will add forword parm
15
23
  - CQ code parse
16
24
  - utils:
17
- log
25
+ - log
18
26
  Change:
19
27
  - Start/End with uuid
20
28
  - One step json parse
data/exe/matrix_qq CHANGED
@@ -18,8 +18,13 @@ unless File.size? config
18
18
  # },
19
19
  # '10000' => {
20
20
  # type: 'friend',
21
+ # intercept: false,
21
22
  # to: { '!abcdef:matrix.org' => 'matrix' }
22
23
  # }
24
+ # 'friend' => {
25
+ # type: 'all',
26
+ # to: { '#friend:matrix.org' => 'matrix' }
27
+ # }
23
28
  }
24
29
  }
25
30
  end)
@@ -50,6 +50,7 @@ module MatrixQQ
50
50
  end
51
51
 
52
52
  def emoji(msg)
53
+ return { type: 'text', data: { text: msg } } if (msg & Emoji).empty?
53
54
  msg.each_codepoint.inject([]) do |obj, code|
54
55
  obj <<
55
56
  if Emoji.include? code
@@ -61,23 +62,24 @@ module MatrixQQ
61
62
  end
62
63
 
63
64
  def format_matrix_message(msg, name, type = 'm.text')
64
- return "#{name} 发送了一条消息" if msg =~ /^-msg /
65
+ room = "{#{@info['send_room']}} " if @info['print_room']
66
+ return "#{room}#{name} 发送了一条消息" if msg =~ /^-msg /
65
67
  return '有人发送了一条消息' if msg =~ /^-all /
66
68
  return if msg =~ /^- /
67
69
 
68
70
  info = type.match(/^m\./).post_match
69
71
  info ||= 'text'
70
- message msg, name, info
72
+ message msg, name, info, room
71
73
  end
72
74
 
73
- def message(msg, name, type)
75
+ def message(msg, name, type, room = '')
74
76
  case type
75
77
  when 'text'
76
78
  m = msg.match(/^-name /)
77
- m ? m.post_match : "[#{name}] #{msg}"
78
- when 'notice' then "[#{name}] notice #{msg}"
79
- when 'emote' then "#{name} #{msg}"
80
- else "#{name} send a #{info}"
79
+ m ? m.post_match : "#{room}[#{name}] #{msg}"
80
+ when 'notice' then "#{room}[#{name}] notice #{msg}"
81
+ when 'emote' then "#{room}#{name} #{msg}"
82
+ else "#{room}#{name} send a #{info}"
81
83
  end
82
84
  end
83
85
 
@@ -16,17 +16,35 @@ module MatrixQQ
16
16
  def run
17
17
  return unless @info.is_a? Hash
18
18
  @info.each_pair do |room, value|
19
- tunnel = Config[:tunnel][room]
20
- next if tunnel.nil?
21
- next unless tunnel[:type] == 'matrix'
22
- each_event value['timeline']['events'], tunnel
19
+ all = run_exact room, value
20
+ run_all room, value if all
23
21
  end
24
22
  end
25
23
 
26
- def each_event(events, tunnel)
24
+ def run_exact(room, value)
25
+ tunnel = Config[:tunnel][room]
26
+ return false if tunnel.nil?
27
+ return false unless tunnel[:type] == 'matrix'
28
+ each_event value['timeline']['events'], tunnel
29
+ MatrixQQ.intercept? tunnel
30
+ end
31
+
32
+ def run_all(room, value)
33
+ tunnel = Config[:tunnel]['matrix']
34
+ return if tunnel.nil?
35
+ return unless tunnel[:type] == 'all'
36
+ each_event \
37
+ value['timeline']['events'],
38
+ tunnel,
39
+ print_room: true,
40
+ send_room: room
41
+ end
42
+
43
+ def each_event(events, tunnel, hackin = {})
27
44
  events.each do |event|
28
45
  next unless event['type'] == 'm.room.message'
29
46
  next if exist event['content']['forword']
47
+ event.merge!(hackin)
30
48
  tunnel[:to].each_pair do |to_room, type|
31
49
  call_module(event, to_room, type)
32
50
  end
@@ -15,18 +15,34 @@ module MatrixQQ
15
15
 
16
16
  def run
17
17
  return unless @info.is_a? Hash
18
+ all = run_exact room, value
19
+ run_all room, value if all
20
+ end
21
+
22
+ def run_exact
18
23
  tunnel = Config[:tunnel][@info['group_id'].to_s]
24
+ return false if tunnel.nil?
25
+ return false unless tunnel[:type] == 'group'
26
+ tunnel[:to].each_pair do |room, type|
27
+ call_module room, type
28
+ end
29
+ MatrixQQ.intercept? tunnel
30
+ end
31
+
32
+ def run_all
33
+ tunnel = Config[:tunnel]['group']
19
34
  return if tunnel.nil?
20
- return unless tunnel[:type] == 'group'
35
+ return unless tunnel[:type] == 'all'
21
36
  tunnel[:to].each_pair do |room, type|
22
- call_module(room, type)
37
+ call_module room, type, print_room: true
23
38
  end
24
39
  end
25
40
 
26
- def call_module(room, type)
41
+ def call_module(room, type, hackin = {})
42
+ info = @info.merge hackin
27
43
  ForwardGroup.send_to[type.to_s].each do |func|
28
44
  puts "Start #{func.name}" if $VERBOSE
29
- func.new(@dbus, @matrix, @info, room).run
45
+ func.new(@dbus, @matrix, info, room).run
30
46
  puts "End #{func.name}" if $VERBOSE
31
47
  end
32
48
  end
@@ -1,7 +1,6 @@
1
1
  module MatrixQQ
2
2
  class QQ
3
3
  class ForwardGroup
4
- # send to matrix
5
4
  class Matrix
6
5
  def initialize(dbus, matrix, info, room)
7
6
  @dbus = dbus
@@ -13,15 +12,17 @@ module MatrixQQ
13
12
  def run
14
13
  msg = message @info['message']
15
14
  sender = user @info['user_id'], @info['group_id']
16
- MatrixQQ::Matrix::Send.text @matrix, @room, "[#{sender}] #{msg}"
15
+ room = "{#{@info['group_id']}}" if @info['print_room']
16
+ MatrixQQ::Matrix::Send.text \
17
+ @matrix, @room,
18
+ "#{room}[#{sender}] #{msg}"
17
19
  end
18
20
 
19
21
  def message(messages)
20
22
  messages.inject('') do |obj, msg|
21
23
  obj + case msg['type']
22
- when 'at' then
24
+ when 'at'
23
25
  "@#{user msg['data']['qq'], @info['group_id']} "
24
- when 'image' then msg['data']['url']
25
26
  else QQ.cq_call msg
26
27
  end
27
28
  end
@@ -36,6 +37,23 @@ module MatrixQQ
36
37
  name = info['card']
37
38
  name == '' ? info['nickname'] : name
38
39
  end
40
+
41
+ def matrix_send_image(uri)
42
+ mxc = @matrix.upload_file uri
43
+ w, h = FastImage.size uri
44
+ open(uri) do |f|
45
+ gen_image_json(f.content_type, uri, mxc, w, h, f.size)
46
+ end
47
+ end
48
+
49
+ def gen_image_json(type, uri, w, h, size)
50
+ {
51
+ body: type,
52
+ msgtype: 'm.image',
53
+ url: uri,
54
+ info: { w: w, h: h, mimetype: type, size: size }
55
+ }.to_json
56
+ end
39
57
  end # Matrix
40
58
 
41
59
  ForwardGroup.send_to['matrix'] << Matrix
@@ -1,5 +1,12 @@
1
1
  module MatrixQQ
2
2
  class << self
3
+ def intercept?(tunnel)
4
+ i = tunnel[:intercept]
5
+ return true if i.nil?
6
+ return true if i
7
+ false
8
+ end
9
+
3
10
  def log(name, call = nil)
4
11
  uuid = SecureRandom.uuid
5
12
  puts "Start #{name} -- #{uuid}" if $VERBOSE
@@ -1,3 +1,3 @@
1
1
  module MatrixQQ
2
- VERSION = '0.3.3'.freeze
2
+ VERSION = '0.4.0'.freeze
3
3
  end
data/lib/matrix_qq.rb CHANGED
@@ -2,6 +2,7 @@ require 'dbus'
2
2
  require 'json'
3
3
  require 'securerandom'
4
4
  require 'concurrent'
5
+ require 'open-uri'
5
6
 
6
7
  require 'matrix_qq/version'
7
8
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: matrix_qq
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - 71e6fd52
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-11-02 00:00:00.000000000 Z
11
+ date: 2017-11-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler