synacrb 0.1.1 → 0.2.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 +4 -4
- data/.gitignore +1 -0
- data/Gemfile +0 -3
- data/Gemfile.lock +5 -5
- data/lib/{common.rb → synacrb/common.rb} +47 -78
- data/lib/synacrb/state.rb +32 -0
- data/lib/synacrb/version.rb +1 -1
- data/lib/synacrb.rb +11 -0
- data/synacrb.gemspec +3 -0
- metadata +34 -6
- data/lib/state.rb +0 -71
- /data/lib/{encrypter.rb → synacrb/encrypter.rb} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b804a81c7a3b8bab7a38706572dc0fd24deccd8f
|
4
|
+
data.tar.gz: 1ea9553f4eecdb3fec32238421cd7be7a8f9d0f3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e4dd2dc9beec7421a801facffcff1ad87bf3708123584c974336ac44e080cb9de626d8e83c2e4d31d3d3028cb89a9b81c7cba3e6a2c1b6bdc29145d803ab4963
|
7
|
+
data.tar.gz: d30008e3e3210856ae7a88e8f3c70bf2db87e1418f09a84ad08cefa32090b335254fefcf020dd7cd5280b1b88ce5e20d65a481b8285509d6430871c2ace6edc3
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
synacrb (0.
|
4
|
+
synacrb (0.2.0)
|
5
|
+
msgpack (~> 1.2)
|
6
|
+
openssl (~> 2.1)
|
5
7
|
|
6
8
|
GEM
|
7
9
|
remote: https://rubygems.org/
|
8
10
|
specs:
|
9
|
-
msgpack (1.
|
10
|
-
openssl (2.0
|
11
|
+
msgpack (1.2.0)
|
12
|
+
openssl (2.1.0)
|
11
13
|
rake (10.5.0)
|
12
14
|
|
13
15
|
PLATFORMS
|
@@ -15,8 +17,6 @@ PLATFORMS
|
|
15
17
|
|
16
18
|
DEPENDENCIES
|
17
19
|
bundler (~> 1.16)
|
18
|
-
msgpack
|
19
|
-
openssl
|
20
20
|
rake (~> 10.0)
|
21
21
|
synacrb!
|
22
22
|
|
@@ -6,76 +6,65 @@ module Synacrb
|
|
6
6
|
|
7
7
|
LIMIT_USER_NAME = 128
|
8
8
|
LIMIT_CHANNEL_NAME = 128
|
9
|
-
LIMIT_GROUP_NAME = 128
|
10
|
-
LIMIT_GROUP_AMOUNT = 2048
|
11
9
|
LIMIT_MESSAGE = 16384
|
12
10
|
|
13
11
|
LIMIT_BULK = 64
|
14
12
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
ERR_UNKNOWN_GROUP = 13
|
28
|
-
ERR_UNKNOWN_MESSAGE = 14
|
29
|
-
ERR_UNKNOWN_USER = 15
|
13
|
+
ERR_LIMIT_REACHED = 1
|
14
|
+
ERR_LOGIN_BANNED = 2
|
15
|
+
ERR_LOGIN_BOT = 3
|
16
|
+
ERR_LOGIN_INVALID = 4
|
17
|
+
ERR_MAX_CONN_PER_IP = 5
|
18
|
+
ERR_MISSING_FIELD = 6
|
19
|
+
ERR_MISSING_PERMISSION = 7
|
20
|
+
ERR_NAME_TAKEN = 8
|
21
|
+
ERR_UNKNOWN_BOT = 9
|
22
|
+
ERR_UNKNOWN_CHANNEL = 10
|
23
|
+
ERR_UNKNOWN_MESSAGE = 11
|
24
|
+
ERR_UNKNOWN_USER = 12
|
30
25
|
|
31
|
-
PERM_READ
|
32
|
-
PERM_WRITE
|
26
|
+
PERM_READ = 1
|
27
|
+
PERM_WRITE = 1 << 1
|
33
28
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
PERM_MANAGE_GROUPS = 1 << 5
|
38
|
-
PERM_MANAGE_MESSAGES = 1 << 6
|
29
|
+
PERM_MANAGE_CHANNELS = 1 << 2
|
30
|
+
PERM_MANAGE_MESSAGES = 1 << 3
|
31
|
+
PERM_MANAGE_MODES = 1 << 4
|
39
32
|
|
40
|
-
|
41
|
-
|
33
|
+
PERM_ALL = PERM_READ | PERM_WRITE | PERM_MANAGE_CHANNELS | PERM_MANAGE_MESSAGES | PERM_MANAGE_MODES;
|
34
|
+
|
35
|
+
Channel = Struct.new(:default_mode_bot, :default_mode_user, :id, :name)
|
42
36
|
Message = Struct.new(:author, :channel, :id, :text, :timestamp, :timestamp_edit)
|
43
|
-
User = Struct.new(:ban, :bot, :
|
37
|
+
User = Struct.new(:admin, :ban, :bot, :id, :modes, :name)
|
44
38
|
|
45
39
|
# CLIENT PACKETS
|
46
|
-
PACKET_CLOSE_ID
|
47
|
-
PACKET_ERR_ID
|
48
|
-
PACKET_RATELIMIT_ID
|
49
|
-
PACKET_CHANNELCREATE_ID
|
50
|
-
PACKET_CHANNELDELETE_ID
|
51
|
-
PACKET_CHANNELUPDATE_ID
|
52
|
-
PACKET_COMMAND_ID
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
PACKET_PRIVATEMESSAGE_ID = 17; PrivateMessage = Struct.new(:text, :recipient)
|
64
|
-
PACKET_TYPING_ID = 18; Typing = Struct.new(:channel)
|
65
|
-
PACKET_USERUPDATE_ID = 19; UserUpdate = Struct.new(:ban, :groups, :id)
|
40
|
+
PACKET_CLOSE_ID = 0; Close = Class.new
|
41
|
+
PACKET_ERR_ID = 1;
|
42
|
+
PACKET_RATELIMIT_ID = 2;
|
43
|
+
PACKET_CHANNELCREATE_ID = 3; ChannelCreate = Struct.new(:default_mode_bot, :default_mode_user, :name)
|
44
|
+
PACKET_CHANNELDELETE_ID = 4; ChannelDelete = Struct.new(:id)
|
45
|
+
PACKET_CHANNELUPDATE_ID = 5; ChannelUpdate = Struct.new(:inner)
|
46
|
+
PACKET_COMMAND_ID = 6; Command = Struct.new(:args, :recipient)
|
47
|
+
PACKET_LOGIN_ID = 7; Login = Struct.new(:bot, :name, :password, :token)
|
48
|
+
PACKET_LOGINUPDATE_ID = 8; LoginUpdate = Struct.new(:name, :password_current, :password_new, :reset_token)
|
49
|
+
PACKET_MESSAGECREATE_ID = 9; MessageCreate = Struct.new(:channel, :text)
|
50
|
+
PACKET_MESSAGEDELETE_ID = 10; MessageDelete = Struct.new(:id)
|
51
|
+
PACKET_MESSAGEDELETEBULK_ID = 11; MessageDeleteBulk = Struct.new(:channel, :ids)
|
52
|
+
PACKET_MESSAGELIST_ID = 12; MessageList = Struct.new(:after, :before, :channel, :limit)
|
53
|
+
PACKET_MESSAGEUPDATE_ID = 13; MessageUpdate = Struct.new(:id, :text)
|
54
|
+
PACKET_PRIVATEMESSAGE_ID = 14; PrivateMessage = Struct.new(:text, :recipient)
|
55
|
+
PACKET_TYPING_ID = 15; Typing = Struct.new(:channel)
|
56
|
+
PACKET_USERUPDATE_ID = 16; UserUpdate = Struct.new(:admin, :ban, :channel_mode, :id)
|
66
57
|
|
67
58
|
# SERVER PACKETS
|
68
|
-
PACKET_CHANNELDELETERECEIVE_ID =
|
69
|
-
PACKET_CHANNELRECEIVE_ID
|
70
|
-
PACKET_COMMANDRECEIVE_ID
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
PACKET_TYPINGRECEIVE_ID = 29; TypingReceive = Struct.new(:author, :channel)
|
78
|
-
PACKET_USERRECEIVE_ID = 30; UserReceive = Struct.new(:inner)
|
59
|
+
PACKET_CHANNELDELETERECEIVE_ID = 17; ChannelDeleteReceive = Struct.new(:inner)
|
60
|
+
PACKET_CHANNELRECEIVE_ID = 18; ChannelReceive = Struct.new(:inner)
|
61
|
+
PACKET_COMMANDRECEIVE_ID = 19; CommandReceive = Struct.new(:args, :author)
|
62
|
+
PACKET_LOGINSUCCESS_ID = 20; LoginSuccess = Struct.new(:created, :id, :token)
|
63
|
+
PACKET_MESSAGEDELETERECEIVE_ID = 21; MessageDeleteReceive = Struct.new(:id)
|
64
|
+
PACKET_MESSAGERECEIVE_ID = 22; MessageReceive = Struct.new(:inner, :new)
|
65
|
+
PACKET_PMRECEIVE_ID = 23; PMReceive = Struct.new(:author, :text)
|
66
|
+
PACKET_TYPINGRECEIVE_ID = 24; TypingReceive = Struct.new(:author, :channel)
|
67
|
+
PACKET_USERRECEIVE_ID = 25; UserReceive = Struct.new(:inner)
|
79
68
|
|
80
69
|
def self.encode_u16(input)
|
81
70
|
(input >> 8).chr + (input % 256).chr
|
@@ -96,12 +85,6 @@ module Synacrb
|
|
96
85
|
ChannelUpdate
|
97
86
|
when PACKET_COMMAND_ID
|
98
87
|
Command
|
99
|
-
when PACKET_GROUPCREATE_ID
|
100
|
-
GroupCreate
|
101
|
-
when PACKET_GROUPDELETE_ID
|
102
|
-
GroupDelete
|
103
|
-
when PACKET_GROUPUPDATE_ID
|
104
|
-
GroupUpdate
|
105
88
|
when PACKET_LOGIN_ID
|
106
89
|
Login
|
107
90
|
when PACKET_LOGINUPDATE_ID
|
@@ -128,10 +111,6 @@ module Synacrb
|
|
128
111
|
ChannelReceive
|
129
112
|
when PACKET_COMMANDRECEIVE_ID
|
130
113
|
CommandReceive
|
131
|
-
when PACKET_GROUPDELETERECEIVE_ID
|
132
|
-
GroupDeleteReceive
|
133
|
-
when PACKET_GROUPRECEIVE_ID
|
134
|
-
GroupReceive
|
135
114
|
when PACKET_LOGINSUCCESS_ID
|
136
115
|
LoginSuccess
|
137
116
|
when PACKET_MESSAGEDELETERECEIVE_ID
|
@@ -157,12 +136,6 @@ module Synacrb
|
|
157
136
|
PACKET_CHANNELUPDATE_ID
|
158
137
|
elsif packet.instance_of? Command
|
159
138
|
PACKET_COMMAND_ID
|
160
|
-
elsif packet.instance_of? GroupCreate
|
161
|
-
PACKET_GROUPCREATE_ID
|
162
|
-
elsif packet.instance_of? GroupDelete
|
163
|
-
PACKET_GROUPDELETE_ID
|
164
|
-
elsif packet.instance_of? GroupUpdate
|
165
|
-
PACKET_GROUPUPDATE_ID
|
166
139
|
elsif packet.instance_of? Login
|
167
140
|
PACKET_LOGIN_ID
|
168
141
|
elsif packet.instance_of? LoginUpdate
|
@@ -189,10 +162,6 @@ module Synacrb
|
|
189
162
|
PACKET_CHANNELRECEIVE_ID
|
190
163
|
elsif packet.instance_of? CommandReceive
|
191
164
|
PACKET_COMMANDRECEIVE_ID
|
192
|
-
elsif packet.instance_of? GroupDeleteReceive
|
193
|
-
PACKET_GROUPDELETERECEIVE_ID
|
194
|
-
elsif packet.instance_of? GroupReceive
|
195
|
-
PACKET_GROUPRECEIVE_ID
|
196
165
|
elsif packet.instance_of? LoginSuccess
|
197
166
|
PACKET_LOGINSUCCESS_ID
|
198
167
|
elsif packet.instance_of? MessageDeleteReceive
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Synacrb
|
2
|
+
class State
|
3
|
+
def initialize
|
4
|
+
@channels = {}
|
5
|
+
@users = {}
|
6
|
+
end
|
7
|
+
def channels
|
8
|
+
@channels
|
9
|
+
end
|
10
|
+
def users
|
11
|
+
@users
|
12
|
+
end
|
13
|
+
def update(packet)
|
14
|
+
if packet.instance_of? Common::ChannelDeleteReceive
|
15
|
+
unless packet.inner.instance_of? Common::Channel
|
16
|
+
packet.inner = Common::Channel.new(*packet.inner)
|
17
|
+
end
|
18
|
+
@channels.delete packet.inner.id
|
19
|
+
elsif packet.instance_of? Common::ChannelReceive
|
20
|
+
unless packet.inner.instance_of? Common::Channel
|
21
|
+
packet.inner = Common::Channel.new(*packet.inner)
|
22
|
+
end
|
23
|
+
@channels[packet.inner.id] = packet.inner
|
24
|
+
elsif packet.instance_of? Common::UserReceive
|
25
|
+
unless packet.inner.instance_of? Common::User
|
26
|
+
packet.inner = Common::User.new(*packet.inner)
|
27
|
+
end
|
28
|
+
@users[packet.inner.id] = packet.inner
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/synacrb/version.rb
CHANGED
data/lib/synacrb.rb
CHANGED
@@ -8,6 +8,17 @@ require "socket"
|
|
8
8
|
require "synacrb/version"
|
9
9
|
|
10
10
|
module Synacrb
|
11
|
+
# Get the mode bitmask for a user in a channel
|
12
|
+
def self.get_mode(channel, user)
|
13
|
+
if user.bot
|
14
|
+
return channel.default_mode_bot unless user.modes.include? channel.id
|
15
|
+
user.modes[channel.id]
|
16
|
+
else
|
17
|
+
return channel.default_mode_user unless user.modes.include? channel.id
|
18
|
+
user.modes[channel.id]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
11
22
|
class Session
|
12
23
|
# Connect to the server
|
13
24
|
def initialize(addr, hash, &callback)
|
data/synacrb.gemspec
CHANGED
@@ -28,6 +28,9 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
29
29
|
spec.require_paths = ["lib"]
|
30
30
|
|
31
|
+
spec.add_runtime_dependency "msgpack", "~> 1.2"
|
32
|
+
spec.add_runtime_dependency "openssl", "~> 2.1"
|
33
|
+
|
31
34
|
spec.add_development_dependency "bundler", "~> 1.16"
|
32
35
|
spec.add_development_dependency "rake", "~> 10.0"
|
33
36
|
end
|
metadata
CHANGED
@@ -1,15 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: synacrb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- jD91mZM2
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-12-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: msgpack
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.2'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.2'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: openssl
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2.1'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '2.1'
|
13
41
|
- !ruby/object:Gem::Dependency
|
14
42
|
name: bundler
|
15
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -53,10 +81,10 @@ files:
|
|
53
81
|
- Rakefile
|
54
82
|
- bin/console
|
55
83
|
- bin/setup
|
56
|
-
- lib/common.rb
|
57
|
-
- lib/encrypter.rb
|
58
|
-
- lib/state.rb
|
59
84
|
- lib/synacrb.rb
|
85
|
+
- lib/synacrb/common.rb
|
86
|
+
- lib/synacrb/encrypter.rb
|
87
|
+
- lib/synacrb/state.rb
|
60
88
|
- lib/synacrb/version.rb
|
61
89
|
- synacrb.gemspec
|
62
90
|
homepage: https://github.com/jD91mZM2/synacrb
|
@@ -79,7 +107,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
79
107
|
version: '0'
|
80
108
|
requirements: []
|
81
109
|
rubyforge_project:
|
82
|
-
rubygems_version: 2.6.
|
110
|
+
rubygems_version: 2.6.14
|
83
111
|
signing_key:
|
84
112
|
specification_version: 4
|
85
113
|
summary: synac library for ruby.
|
data/lib/state.rb
DELETED
@@ -1,71 +0,0 @@
|
|
1
|
-
module Synacrb
|
2
|
-
class State
|
3
|
-
def initialize
|
4
|
-
@channels = {}
|
5
|
-
@groups = {}
|
6
|
-
@users = {}
|
7
|
-
end
|
8
|
-
def channels
|
9
|
-
@channels
|
10
|
-
end
|
11
|
-
def groups
|
12
|
-
@groups
|
13
|
-
end
|
14
|
-
def users
|
15
|
-
@users
|
16
|
-
end
|
17
|
-
def update(packet)
|
18
|
-
if packet.instance_of? Common::ChannelDeleteReceive
|
19
|
-
unless packet.inner.instance_of? Common::Channel
|
20
|
-
packet.inner = Common::Channel.new(*packet.inner)
|
21
|
-
end
|
22
|
-
@channels.delete packet.inner.id
|
23
|
-
elsif packet.instance_of? Common::ChannelReceive
|
24
|
-
unless packet.inner.instance_of? Common::Channel
|
25
|
-
packet.inner = Common::Channel.new(*packet.inner)
|
26
|
-
end
|
27
|
-
@channels[packet.inner.id] = packet.inner
|
28
|
-
elsif packet.instance_of? Common::GroupDeleteReceive
|
29
|
-
unless packet.inner.instance_of? Common::Group
|
30
|
-
packet.inner = Common::Group.new(*packet.inner)
|
31
|
-
end
|
32
|
-
for id in @groups.each_key
|
33
|
-
if @groups[id].pos > packet.inner.pos
|
34
|
-
@groups[id].pos -= 1
|
35
|
-
end
|
36
|
-
end
|
37
|
-
@groups.delete packet.inner.id
|
38
|
-
elsif packet.instance_of? Common::GroupReceive
|
39
|
-
unless packet.inner.instance_of? Common::Group
|
40
|
-
packet.inner = Common::Group.new(*packet.inner)
|
41
|
-
end
|
42
|
-
if packet.new
|
43
|
-
unless @groups[packet.inner.id].nil?
|
44
|
-
pos = @groups[packet.inner.id].pos
|
45
|
-
|
46
|
-
if packet.inner.pos > pos
|
47
|
-
for id in @groups.each_key
|
48
|
-
if @groups[id].pos > pos && @groups[id].pos <= packet.inner.pos
|
49
|
-
@groups[id].pos -= 1
|
50
|
-
end
|
51
|
-
end
|
52
|
-
elsif packet.inner.pos < pos
|
53
|
-
for group in @groups.each_key
|
54
|
-
if @groups[id].pos >= packet.inner.pos && @groups[id].pos < pos
|
55
|
-
@groups[id].pos += 1
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
else
|
60
|
-
for group in @groups.each_key
|
61
|
-
if @groups[id].pos >= packet.inner.pos
|
62
|
-
@groups[id].pos += 1
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
@groups[packet.inner.id] = packet.inner
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
File without changes
|