khl 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: ed901cab84178a2961285b975bf703bb034b998e0d70e7e8c8e06c5f27187137
4
+ data.tar.gz: 0447d12135db7697c59aadfd7f358e64982db782af00c2fdb90c4ea1bb2123a7
5
+ SHA512:
6
+ metadata.gz: 2b71ec8d6a9f2e46c412a0552f2f6484d37a273ce141386ea9b94c8756ab54d15774d857cc42a25f1b4ea6be32b1a5e03d4544d04b1911dfc121778bed1ef4c5
7
+ data.tar.gz: 97ee22265dd77c70c3d432418e2a89410b2eb14984a81df83a08206fe1344f6c3479090afcb488e8f43bf9ba363ffaa8c33ff8dbe8804b3ec6932fdd4bb0e05e
data/CHANGELOG.md ADDED
@@ -0,0 +1,5 @@
1
+ ### 1.0.0 - 2022-03-29
2
+
3
+ * Add 开黑啦 HTTP API
4
+ * Add 开黑啦 WebSocket API
5
+ * Add GitHub CI
data/README.md ADDED
@@ -0,0 +1,53 @@
1
+ # KHL
2
+
3
+ 开黑啦 Ruby SDK
4
+
5
+ [官方开发者文档](https://developer.kaiheila.cn/doc)
6
+
7
+ ## Prerequisites
8
+
9
+ * ruby >= 2.7
10
+
11
+ ## Installation
12
+
13
+ Add this line to your application's Gemfile:
14
+
15
+ ```ruby
16
+ gem 'khl'
17
+ ```
18
+
19
+ And then execute:
20
+
21
+ $ bundle install
22
+
23
+ Or install it yourself as:
24
+
25
+ $ gem install khl
26
+
27
+ ## Usage
28
+
29
+ ```
30
+ require "khl"
31
+
32
+ token = "your_bot_token"
33
+
34
+ # Call HTTP API
35
+ http_client = KHL::HTTP::Client.new(token)
36
+ http_client.guild.list # Call guild/list API
37
+
38
+ # Connect to WebSocket API
39
+ ws_client = KHL::WebSocket::Client.new(token)
40
+ Thread.new { ws_client.run } # Run WebSocket client
41
+ ws_clinet.state # Get current state
42
+ ws_client.messages.pop # Get message from queue
43
+ ```
44
+
45
+ ## Development
46
+
47
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
48
+
49
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
50
+
51
+ ## Contributing
52
+
53
+ Bug reports and pull requests are welcome on GitHub at https://github.com/DessertShop/KHL.
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base"
4
+
5
+ module KHL
6
+ module HTTP
7
+ # 媒体相关接口
8
+ # https://developer.kaiheila.cn/doc/http/asset
9
+ class Asset < Base
10
+ # 上传媒体文件
11
+ # @param [Hash] options 可选参数
12
+ # @option options [IO] :file 目前支持 图片,视频(.mp4 .mov),文件
13
+ # @return [KHL::HTTP::Response]
14
+ def create(options = {})
15
+ post_file(options)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base"
4
+
5
+ module KHL
6
+ module HTTP
7
+ # 徽章相关接口
8
+ # https://developer.kaiheila.cn/doc/http/badge
9
+ class Badge < Base
10
+ # 获取服务器徽章
11
+ # @param [String] guild_id 服务器 ID
12
+ # @param [Hash] options 可选参数
13
+ # @option options [Integer] :style 样式类型,默认为 0
14
+ # @return [KHL::HTTP::Response]
15
+ def guild(guild_id, options = {})
16
+ get(options.merge(guild_id: guild_id))
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,101 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support/core_ext/string/inflections"
4
+ require "json"
5
+ require "net/http"
6
+ require "uri"
7
+
8
+ require_relative "response"
9
+
10
+ module KHL
11
+ module HTTP
12
+ # 接口基类
13
+ class Base
14
+ BASE_URL = "https://www.kaiheila.cn/api"
15
+ API_VERSION = "v3"
16
+ END_POINT = "#{BASE_URL}/#{API_VERSION}"
17
+
18
+ attr_reader :config
19
+
20
+ # @param config [Hash] Config
21
+ # @option config [String] :token Bot token (required)
22
+ # @option config [String] :token_type Token type
23
+ # @option config [String] :language Language
24
+ def initialize(config)
25
+ raise ArgumentError, "missing token" unless config[:token]
26
+ config[:token_type] ||= "Bot"
27
+ config[:language] ||= "zh-cn"
28
+
29
+ @config = config
30
+ end
31
+
32
+ # GET 请求
33
+ def get(params = {})
34
+ action = params.key?(:action) ? params.delete(:action) : action_name # 可在 params 中手动配置 action
35
+ uri = URI("#{END_POINT}/#{resource_name}/#{action}")
36
+ params = filter_params(params)
37
+ uri.query = URI.encode_www_form(params)
38
+ request = Net::HTTP::Get.new(uri)
39
+ request["Authorization"] = "#{config[:token_type]} #{config[:token]}"
40
+ raw_response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
41
+ http.request(request)
42
+ end
43
+
44
+ Response.new(raw_response)
45
+ end
46
+
47
+ # POST 请求
48
+ def post(params = {})
49
+ action = params.key?(:action) ? params.delete(:action) : action_name
50
+ uri = URI("#{END_POINT}/#{resource_name}/#{action}")
51
+ request = Net::HTTP::Post.new(uri)
52
+ request["Authorization"] = "#{config[:token_type]} #{config[:token]}"
53
+ request["Content-type"] = "application/json"
54
+ params = filter_params(params)
55
+ request.body = JSON.generate(params)
56
+ raw_response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
57
+ http.request(request)
58
+ end
59
+
60
+ Response.new(raw_response)
61
+ end
62
+
63
+ # POST 文件请求
64
+ def post_file(params = {})
65
+ action = params.key?(:action) ? params.delete(:action) : action_name
66
+ uri = URI("#{END_POINT}/#{resource_name}/#{action}")
67
+ request = Net::HTTP::Post.new(uri)
68
+ request["Authorization"] = "#{config[:token_type]} #{config[:token]}"
69
+ request["Content-type"] = params.delete(:content_type) || "form-data" # 可在 params 中手动配置 content_type
70
+ params = filter_params(params)
71
+ request.set_form(params, "multipart/form-data")
72
+ raw_response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
73
+ http.request(request)
74
+ end
75
+
76
+ Response.new(raw_response)
77
+ end
78
+
79
+ private
80
+
81
+ # 过滤掉值为 nil 的参数,并将键全部转化为 String
82
+ def filter_params(params)
83
+ return {} unless params&.is_a?(Hash)
84
+
85
+ params = params.reject { |_, v| v.nil? }
86
+ params.transform_keys(&:to_s)
87
+ end
88
+
89
+ # 根据类名获取资源名
90
+ def resource_name
91
+ self.class.name.demodulize.underscore.dasherize
92
+ end
93
+
94
+ # 根据调用此方法的方法名,获取对应的接口名
95
+ def action_name
96
+ call_stack = caller(2..2)&.first
97
+ call_stack[/`.*'/][1..-2]&.dasherize
98
+ end
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base"
4
+
5
+ module KHL
6
+ module HTTP
7
+ # 黑名单相关接口
8
+ # https://developer.kaiheila.cn/doc/http/blacklist
9
+ class Blacklist < Base
10
+ # 获取黑名单列表
11
+ # @param [String] guild_id 服务器 ID
12
+ # @param [Hash] options 可选参数
13
+ # @option options [Integer] :page 页数
14
+ # @option options [Integer] :page_size 每页数据数量
15
+ # @option options [String] :sort 代表排序的字段,比如 -id 代表 id 按 DESC 排序,id 代表 id 按 ASC 排序
16
+ # @return [KHL::HTTP::Response]
17
+ def list(guild_id, options = {})
18
+ get(options.merge(guild_id: guild_id))
19
+ end
20
+
21
+ # 加入黑名单
22
+ # @param [String] guild_id 服务器 ID
23
+ # @param [String] target_id 用户 ID
24
+ # @param [Hash] options 可选参数
25
+ # @option options [String] :remark 加入黑名单的原因
26
+ # @option options [Integer] :del_msg_days 删除最近几天的消息,最大 7 天,默认 0
27
+ # @return [KHL::HTTP::Response]
28
+ def create(guild_id, target_id, options = {})
29
+ post(options.merge(guild_id: guild_id, target_id: target_id))
30
+ end
31
+
32
+ # 移除黑名单
33
+ # @param [String] guild_id 服务器 ID
34
+ # @param [String] target_id 用户 ID
35
+ # @return [KHL::HTTP::Response]
36
+ def delete(guild_id, target_id)
37
+ post(guild_id: guild_id, target_id: target_id)
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base"
4
+
5
+ module KHL
6
+ module HTTP
7
+ # 频道相关接口
8
+ # https://developer.kaiheila.cn/doc/http/channel
9
+ class Channel < Base
10
+ # 获取频道列表
11
+ # @param [String] guild_id 服务器 ID
12
+ # @param [Hash] options 可选参数
13
+ # @option options [Integer] :page 页数
14
+ # @option options [Integer] :page_size 每页数据数量
15
+ # @option options [Integer] :type 频道类型,1 为文字,2 为语音,默认为 1
16
+ # @return [KHL::HTTP::Response]
17
+ def list(guild_id, options = {})
18
+ get(options.merge(guild_id: guild_id))
19
+ end
20
+
21
+ # 获取频道详情
22
+ # @param [String] target_id 频道 ID
23
+ # @return [KHL::HTTP::Response]
24
+ def view(target_id)
25
+ get(target_id: target_id)
26
+ end
27
+
28
+ # 创建频道
29
+ # @param [String] guild_id 服务器 ID
30
+ # @param [String] name 频道名称
31
+ # @param [Hash] options 可选参数
32
+ # @option options [String] :parent_id 父分组 ID
33
+ # @option options [Integer] :type 频道类型,1 文字,2 语音,默认为 1
34
+ # @option options [Integer] :limit_amount 语音频道人数限制,最大 99
35
+ # @option options [Integer] :voice_quality 语音音质,默认为 2。1 流畅,2 正常,3 高质量
36
+ # @return [KHL::HTTP::Response]
37
+ def create(guild_id, name, options = {})
38
+ post(options.merge(guild_id: guild_id, name: name))
39
+ end
40
+
41
+ # 删除频道
42
+ # @param [String] channel_id 频道 ID
43
+ # @return [KHL::HTTP::Response]
44
+ def delete(channel_id)
45
+ post(channel_id: channel_id)
46
+ end
47
+
48
+ # 语音频道之间移动用户
49
+ # @note 只能在语音频道之间移动,用户也必须在其他语音频道在线才能够移动到目标频道
50
+ # @param [String] target_id 频道 ID,需要是语音频道
51
+ # @param [Array] user_ids 用户 ID 数组
52
+ # @return [KHL::HTTP::Response]
53
+ def move_user(target_id, user_ids)
54
+ post(target_id: target_id, user_ids: user_ids)
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base"
4
+
5
+ module KHL
6
+ module HTTP
7
+ # 频道角色权限相关接口
8
+ # https://developer.kaiheila.cn/doc/http/channel
9
+ class ChannelRole < Base
10
+ # 频道角色权限详情
11
+ # @param [String] channel_id 频道 ID
12
+ # @return [KHL::HTTP::Response]
13
+ def index(channel_id)
14
+ get(channel_id: channel_id)
15
+ end
16
+
17
+ # 创建频道角色权限
18
+ # @param [String] channel_id 频道 ID,如果频道是分组的 ID,会同步给所有 sync=1 的子频道
19
+ # @param [Hash] options
20
+ # @option options [String] :type value 的类型,只能为 "role_id","user_id",不传则默认为 "user_id"
21
+ # @option options [String] :value 根据 type 的值,为 用户 ID 或 频道 ID
22
+ # @return [KHL::HTTP::Response]
23
+ def create(channel_id, options = {})
24
+ post(options.merge(channel_id: channel_id))
25
+ end
26
+
27
+ # 更新频道角色权限
28
+ # @param [String] channel_id 频道 ID,如果频道是分组的 ID,会同步给所有 sync=1 的子频道
29
+ # @param [Hash] options
30
+ # @option options [String] :type value 的类型,只能为 "role_id","user_id",不传则默认为 "user_id"
31
+ # @option options [String] :value 根据 type 的值,为 用户 ID 或 频道 ID
32
+ # @option options [Integer] :allow 默认为 0,想要设置的允许的权限值
33
+ # @option options [Integer] :deny 默认为 0,想要设置的拒绝的权限值
34
+ # @return [KHL::HTTP::Response]
35
+ def update(channel_id, options = {})
36
+ post(options.merge(channel_id: channel_id))
37
+ end
38
+
39
+ # 删除频道角色权限
40
+ # @param [String] channel_id 频道 ID,如果频道是分组的 ID,会同步给所有 sync=1 的子频道
41
+ # @param [Hash] options
42
+ # @option options [String] :type value 的类型,只能为 "role_id","user_id",不传则默认为 "user_id"
43
+ # @option options [String] :value 根据 type 的值,为用户 ID 或频道 ID
44
+ # @return [KHL::HTTP::Response]
45
+ def delete(channel_id, options = {})
46
+ post(options.merge(channel_id: channel_id))
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base"
4
+
5
+ module KHL
6
+ module HTTP
7
+ # 频道用户相关接口
8
+ # https://developer.kaiheila.cn/doc/http/channel-user
9
+ class ChannelUser < Base
10
+ # 根据用户 ID 和服务器 ID 获取用户所在语音频道
11
+ # @param [String] guild_id 服务器 ID
12
+ # @param [String] user_id 用户 ID
13
+ # @param [Hash] options 可选参数
14
+ # @option options [Integer] :page 页数
15
+ # @option options [Integer] :page_size 每页数据数量
16
+ # @return [KHL::HTTP::Response]
17
+ def get_joined_channel(guild_id, user_id, options = {})
18
+ get(options.merge(guild_id: guild_id, user_id: user_id))
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "asset"
4
+ require_relative "badge"
5
+ require_relative "blacklist"
6
+ require_relative "channel"
7
+ require_relative "channel_role"
8
+ require_relative "channel_user"
9
+ require_relative "direct_message"
10
+ require_relative "game"
11
+ require_relative "gateway"
12
+ require_relative "guild"
13
+ require_relative "guild_emoji"
14
+ require_relative "guild_mute"
15
+ require_relative "guild_role"
16
+ require_relative "intimacy"
17
+ require_relative "invite"
18
+ require_relative "message"
19
+ require_relative "user"
20
+ require_relative "user_chat"
21
+
22
+ module KHL
23
+ module HTTP
24
+ # Client for the KHL HTTP API
25
+ # @example
26
+ # client = KHL::HTTP::Client.new(token: "bot_token")
27
+ # client.guild.list # Call guild/list API
28
+ class Client
29
+ attr_reader :asset,
30
+ :badge,
31
+ :blacklist,
32
+ :channel,
33
+ :channel_role,
34
+ :channel_user,
35
+ :direct_message,
36
+ :game,
37
+ :gateway,
38
+ :guild,
39
+ :guild_emoji,
40
+ :guild_mute,
41
+ :guild_role,
42
+ :intimacy,
43
+ :invite,
44
+ :message,
45
+ :user,
46
+ :user_chat
47
+
48
+ # @param config [Hash] Config
49
+ # @option config [String] :token Bot token (required)
50
+ # @option config [String] :token_type Token type
51
+ # @option config [String] :language Language
52
+ def initialize(config = {})
53
+ raise ArgumentError, "missing token" unless config[:token]
54
+ config[:token_type] ||= "Bot"
55
+ config[:language] ||= "zh-cn"
56
+
57
+ @asset = Asset.new(config)
58
+ @badge = Badge.new(config)
59
+ @blacklist = Blacklist.new(config)
60
+ @channel = Channel.new(config)
61
+ @channel_role = ChannelRole.new(config)
62
+ @channel_user = ChannelUser.new(config)
63
+ @direct_message = DirectMessage.new(config)
64
+ @game = Game.new(config)
65
+ @gateway = Gateway.new(config)
66
+ @guild = Guild.new(config)
67
+ @guild_emoji = GuildEmoji.new(config)
68
+ @guild_mute = GuildMute.new(config)
69
+ @guild_role = GuildRole.new(config)
70
+ @intimacy = Intimacy.new(config)
71
+ @invite = Invite.new(config)
72
+ @message = Message.new(config)
73
+ @user = User.new(config)
74
+ @user_chat = UserChat.new(config)
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,85 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base"
4
+
5
+ module KHL
6
+ module HTTP
7
+ # 用户私聊消息相关接口
8
+ # https://developer.kaiheila.cn/doc/http/direct-message
9
+ class DirectMessage < Base
10
+ # 获取私信聊天消息列表
11
+ # @note 此接口非标准分页,需要根据参考消息来查询相邻分页的消息
12
+ # @param [Hash] options 可选参数
13
+ # @option options [String] :target_id 用户 ID,后端会自动创建会话。有此参数之后可不传 chat_code 参数
14
+ # @option options [String] :chat_code 会话 Code。chat_code 与 target_id 必须传一个
15
+ # @option options [String] :msg_id 消息 ID,不传则查询最新消息
16
+ # @option options [String] :flag 查询模式,有三种模式可以选择 before、around、after。不传则默认查询最新的消息
17
+ # @option options [Integer] :page 页数
18
+ # @option options [Integer] :page_size 当前分页消息数量,默认 50
19
+ # @return [KHL::HTTP::Response]
20
+ def list(options = {})
21
+ get(options)
22
+ end
23
+
24
+ # 发送私信聊天消息
25
+ # @param [String] content 消息内容
26
+ # @param [Hash] options 可选参数
27
+ # @option options [Integer] :type 消息类型,不传默认为 1,代表文本类型。9 代表 kmarkdown 消息,10 代表卡片消息
28
+ # @option options [String] :target_id 用户 ID,后端会自动创建会话。有此参数之后可不传 chat_code 参数
29
+ # @option options [String] :chat_code 会话 Code。chat_code 与 target_id 必须传一个
30
+ # @option options [String] :quote 回复某条消息的 msg_id
31
+ # @option options [String] :nonce 随机字符串,服务端不做处理, 原样返回
32
+ # @return [KHL::HTTP::Response]
33
+ def create(content, options = {})
34
+ post(options.merge(content: content))
35
+ end
36
+
37
+ # 更新私信聊天消息
38
+ # @note 目前支持消息 type 为 9、10 的修改,即 KMarkdown 和 CardMessage
39
+ # @param [String] content 消息内容
40
+ # @param [Hash] options 可选参数
41
+ # @option options [String] :msg_id 消息 ID
42
+ # @option options [String] :quote 回复某条消息的 msg_id。如果为空,则代表删除回复,不传则无影响
43
+ # @return [KHL::HTTP::Response]
44
+ def update(content, options = {})
45
+ post(options.merge(content: content))
46
+ end
47
+
48
+ # 删除私信聊天消息
49
+ # @note 只能删除自己的消息
50
+ # @param [Hash] options 可选参数
51
+ # @option options [String] :msg_id 消息 ID
52
+ # @return [KHL::HTTP::Response]
53
+ def delete(options = {})
54
+ post(options)
55
+ end
56
+
57
+ # 获取频道消息某回应的用户列表
58
+ # @param [String] msg_id 消息 ID
59
+ # @param [Hash] options 可选参数
60
+ # @option options [String] :emoji Emoji ID,可以为 GuildEmoji 或者 Emoji,注意:在 GET 中,应该进行 urlencode
61
+ # @return [KHL::HTTP::Response]
62
+ def reaction_list(msg_id, options = {})
63
+ get(options.merge(msg_id: msg_id))
64
+ end
65
+
66
+ # 给某个消息添加回应
67
+ # @param [String] msg_id 消息 ID
68
+ # @param [String] emoji Emoji ID,可以为 GuildEmoji 或者 Emoji,注意:在 GET 中,应该进行 urlencode
69
+ # @return [KHL::HTTP::Response]
70
+ def add_reaction(msg_id, emoji)
71
+ post(msg_id: msg_id, emoji: emoji)
72
+ end
73
+
74
+ # 删除消息的某个回应
75
+ # @param [String] msg_id 消息 ID
76
+ # @param [String] emoji Emoji ID,可以为 GuildEmoji 或者 Emoji,注意:在 GET 中,应该进行 urlencode
77
+ # @param [Hash] options 可选参数
78
+ # @option options [String] :user_id 用户 ID,如果不填则为自己的 ID。删除别人的回应需要有管理频道消息的权限
79
+ # @return [KHL::HTTP::Response]
80
+ def delete_reaction(msg_id, emoji, options = {})
81
+ post(options.merge(msg_id: msg_id, emoji: emoji))
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base"
4
+
5
+ module KHL
6
+ module HTTP
7
+ # 用户动态相关接口-游戏/进程/音乐
8
+ # https://developer.kaiheila.cn/doc/http/game
9
+ class Game < Base
10
+ # 游戏列表
11
+ # @return [KHL::HTTP::Response]
12
+ def list
13
+ get(action: nil)
14
+ end
15
+
16
+ # 添加游戏
17
+ # @note 本接口有数据插入频率限制,单日最大可创建 5 个游戏数据
18
+ # @param [String] name 名称
19
+ # @param [Hash] options 可选参数
20
+ # @option options [String] :process_name 进程名
21
+ # @option options [String] :icon 图标
22
+ # @return [KHL::HTTP::Response]
23
+ def create(name, options = {})
24
+ post(options.merge(name: name))
25
+ end
26
+
27
+ # 更新游戏
28
+ # @param [Integer] id ID
29
+ # @param [Hash] options 可选参数
30
+ # @option options [String] :name 名称
31
+ # @option options [String] :icon 图标
32
+ # @return [KHL::HTTP::Response]
33
+ def update(id, options = {})
34
+ post(options.merge(id: id))
35
+ end
36
+
37
+ # 删除游戏
38
+ # @param [Integer] id ID
39
+ # @return [KHL::HTTP::Response]
40
+ def delete(id)
41
+ post(id: id)
42
+ end
43
+
44
+ # 添加游戏记录-开始玩
45
+ # @param [Integer] id 游戏 ID
46
+ # @param [Integer] data_type 请求数据类型,固定传 1(游戏)
47
+ # @return [KHL::HTTP::Response]
48
+ def activity(id, data_type)
49
+ post(id: id, data_type: data_type)
50
+ end
51
+
52
+ # 删除游戏记录-结束玩
53
+ # @return [KHL::HTTP::Response]
54
+ def delete_activity
55
+ post
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base"
4
+
5
+ module KHL
6
+ module HTTP
7
+ # 网关相关接口
8
+ # https://developer.kaiheila.cn/doc/http/gateway
9
+ class Gateway < Base
10
+ # 获取网关连接地址
11
+ # @param [Hash] options 可选参数
12
+ # @option options [Integer] :compress 下发数据是否压缩,默认为 1,代表压缩
13
+ # @return [KHL::HTTP::Response]
14
+ def index(options = {})
15
+ get(options)
16
+ end
17
+ end
18
+ end
19
+ end