mirror of https://github.com/cloudwithax/flare.git
man idek what i added
This commit is contained in:
parent
b80a4c3cce
commit
fe3f7d0b48
3
init.lua
3
init.lua
|
|
@ -2,6 +2,9 @@ return {
|
||||||
Enums = require('enums'),
|
Enums = require('enums'),
|
||||||
Node = require('node'),
|
Node = require('node'),
|
||||||
Player = require('player'),
|
Player = require('player'),
|
||||||
|
Playlist = require('playlist'),
|
||||||
Pool = require('pool'),
|
Pool = require('pool'),
|
||||||
|
RoutePlanner = require('routeplanner'),
|
||||||
|
Track = require('track'),
|
||||||
Utils = require('utils')
|
Utils = require('utils')
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,18 @@
|
||||||
|
---@diagnostic disable: need-check-nil
|
||||||
local discordia = require('discordia')
|
local discordia = require('discordia')
|
||||||
local websocket = require('coro-websocket')
|
local websocket = require('coro-websocket')
|
||||||
local http = require('coro-http')
|
local http = require('coro-http')
|
||||||
local json = require('json')
|
local json = require('json')
|
||||||
local querystring = require('querystring')
|
|
||||||
local utils = require('utils')
|
local utils = require('utils')
|
||||||
local enums = require('enums')
|
local enums = require('enums')
|
||||||
local interp = utils.interp
|
local interp = utils.interp
|
||||||
local split = utils.split
|
local split = utils.split
|
||||||
local dump = utils.dump
|
local dump = utils.dump
|
||||||
|
local url = require('url')
|
||||||
local SearchType = enums.SearchType
|
local SearchType = enums.SearchType
|
||||||
|
local Track = require('track')
|
||||||
|
local Playlist = require('playlist')
|
||||||
|
local package = require('../../package')
|
||||||
|
|
||||||
local Emitter = discordia.Emitter
|
local Emitter = discordia.Emitter
|
||||||
local class = discordia.class
|
local class = discordia.class
|
||||||
|
|
@ -52,7 +56,7 @@ function Node:__init(client, options)
|
||||||
{ 'Authorization', self._password },
|
{ 'Authorization', self._password },
|
||||||
{ 'Num-Shards', self._client.shardCount },
|
{ 'Num-Shards', self._client.shardCount },
|
||||||
{ 'User-Id', self._client.user.id },
|
{ 'User-Id', self._client.user.id },
|
||||||
{ 'Client-Name', "Flare/1.0.0" }
|
{ 'Client-Name', format("Flare/%s", package.version) }
|
||||||
}
|
}
|
||||||
|
|
||||||
self._res = nil
|
self._res = nil
|
||||||
|
|
@ -76,7 +80,6 @@ function Node:_listen()
|
||||||
self:emit('stats', self._stats)
|
self:emit('stats', self._stats)
|
||||||
elseif payload.op == 'ready' then
|
elseif payload.op == 'ready' then
|
||||||
self._session_id = payload.sessionId
|
self._session_id = payload.sessionId
|
||||||
print(self._session_id)
|
|
||||||
elseif payload.op == 'event' then
|
elseif payload.op == 'event' then
|
||||||
self:emit('event', payload)
|
self:emit('event', payload)
|
||||||
end
|
end
|
||||||
|
|
@ -84,7 +87,6 @@ function Node:_listen()
|
||||||
self:disconnect()
|
self:disconnect()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
self:close()
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function Node:connect()
|
function Node:connect()
|
||||||
|
|
@ -133,9 +135,7 @@ function Node:_send(method, path, _guild_id, _query, _data, include_version)
|
||||||
end
|
end
|
||||||
|
|
||||||
if _query then
|
if _query then
|
||||||
query = querystring.stringify({
|
query = "?" .. _query
|
||||||
identifier = _query
|
|
||||||
})
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local uri = format('%s%s%s%s%s', self._rest_uri, version, path, guild_id, query)
|
local uri = format('%s%s%s%s%s', self._rest_uri, version, path, guild_id, query)
|
||||||
|
|
@ -144,11 +144,7 @@ function Node:_send(method, path, _guild_id, _query, _data, include_version)
|
||||||
local res, body = http.request(method, uri, self._headers, data)
|
local res, body = http.request(method, uri, self._headers, data)
|
||||||
|
|
||||||
if res.code == 200 then
|
if res.code == 200 then
|
||||||
if type(body) == "string" then
|
return json.decode(body)
|
||||||
return body
|
|
||||||
else
|
|
||||||
return json.decode(body)
|
|
||||||
end
|
|
||||||
elseif res.code == 204 or method == "DELETE" then
|
elseif res.code == 204 or method == "DELETE" then
|
||||||
return nil
|
return nil
|
||||||
else
|
else
|
||||||
|
|
@ -158,13 +154,52 @@ end
|
||||||
|
|
||||||
function Node:get_tracks(_query, search_type)
|
function Node:get_tracks(_query, search_type)
|
||||||
if not self._connected then return end
|
if not self._connected then return end
|
||||||
assert(type(search_type) == type(SearchType), "Search type is not valid")
|
assert(_query, "Query must be provided.")
|
||||||
|
|
||||||
local query = search_type .. ":" .. _query
|
local query = nil
|
||||||
|
|
||||||
print(query)
|
if not search_type then
|
||||||
|
local parsed = url.parse(_query)
|
||||||
|
if parsed.host then
|
||||||
|
query = "identifier=" .. utils.escape(_query)
|
||||||
|
else
|
||||||
|
query = "identifier=" .. SearchType.YOUTUBE .. ":" .. utils.escape(_query)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
assert(utils.valueintb(SearchType, search_type), "Search type not valid.")
|
||||||
|
query = "identifier=" .. search_type .. ":" .. utils.escape(_query)
|
||||||
|
end
|
||||||
|
|
||||||
-- local tracks = self:_send('GET', 'loadtracks', nil, '')
|
|
||||||
|
|
||||||
|
local data = self:_send('GET', 'loadtracks', nil, query)
|
||||||
|
local load_type = data.loadType
|
||||||
|
|
||||||
|
if not load_type then
|
||||||
|
return print("There was an error while trying to load this track.")
|
||||||
|
end
|
||||||
|
|
||||||
|
if load_type == "NO_MATCHES" then
|
||||||
|
return nil
|
||||||
|
elseif load_type == "LOAD_FAILED" then
|
||||||
|
local exception = data.exception
|
||||||
|
return print(format("Error loading track: %s [%s]", exception.message, exception.severity))
|
||||||
|
elseif load_type == "SEARCH_RESULT" or load_type == "TRACK_LOADED" then
|
||||||
|
local tracks = {}
|
||||||
|
for _, v in pairs(data.tracks) do
|
||||||
|
table.insert(tracks, Track(v))
|
||||||
|
end
|
||||||
|
return tracks
|
||||||
|
elseif load_type == "PLAYLIST_LOADED" then
|
||||||
|
local tracks = {}
|
||||||
|
for _, v in pairs(data.tracks) do
|
||||||
|
table.insert(tracks, Track(v))
|
||||||
|
end
|
||||||
|
|
||||||
|
return Playlist(data, tracks)
|
||||||
|
else
|
||||||
|
return print("There was an error while trying to load this track.")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
return Node
|
return Node
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
local discordia = require('discordia')
|
||||||
|
local class = discordia.class
|
||||||
|
|
||||||
|
local Playlist = class('Playlist')
|
||||||
|
|
||||||
|
function Playlist:__init(data, tracks)
|
||||||
|
local info = data.playlistInfo
|
||||||
|
self._selected_track = info.selectedTrack
|
||||||
|
self._name = info.name
|
||||||
|
self._tracks = tracks
|
||||||
|
|
||||||
|
if self._selected_track ~= -1 then
|
||||||
|
self._selected_track = self._tracks[self._selected_track]
|
||||||
|
end
|
||||||
|
|
||||||
|
self._track_count = #self._tracks
|
||||||
|
end
|
||||||
|
|
||||||
|
return Playlist
|
||||||
|
|
@ -2,9 +2,7 @@ local discordia = require('discordia')
|
||||||
local class = discordia.class
|
local class = discordia.class
|
||||||
|
|
||||||
local Node = require('node')
|
local Node = require('node')
|
||||||
local Pool, get = class('Pool')
|
local Pool = class('Pool')
|
||||||
local dump = require('utils').dump
|
|
||||||
local random_value = require('utils').random_value
|
|
||||||
|
|
||||||
local format = string.format
|
local format = string.format
|
||||||
|
|
||||||
|
|
@ -21,17 +19,16 @@ function Pool:create_node(client, options)
|
||||||
end
|
end
|
||||||
|
|
||||||
options.pool = self
|
options.pool = self
|
||||||
local id = options.identifier
|
local node = Node(client, options)
|
||||||
self._nodes[id] = Node(client, options)
|
self._nodes[options.identifier] = node
|
||||||
|
return node
|
||||||
end
|
end
|
||||||
|
|
||||||
function Pool:get_node(identifier)
|
function Pool:get_node(identifier)
|
||||||
if self._nodes[identifier] then
|
if self._nodes[identifier] then
|
||||||
return self._nodes[identifier]
|
return self._nodes[identifier]
|
||||||
else
|
else
|
||||||
print("getting random node")
|
return self._nodes[next(self._nodes)]
|
||||||
local node = random_value(self._nodes)
|
|
||||||
print(node)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
local discordia = require('discordia')
|
||||||
|
local class = discordia.class
|
||||||
|
|
||||||
|
local Track = class('Track')
|
||||||
|
|
||||||
|
function Track:__init(data)
|
||||||
|
local info = data.info
|
||||||
|
self._track_id = data.encoded
|
||||||
|
self._author = info.author
|
||||||
|
self._identifier = info.identifier
|
||||||
|
self._uri = info.uri
|
||||||
|
self._source_name = info.sourceName
|
||||||
|
self._title = info.title
|
||||||
|
self._position = info.position
|
||||||
|
self._length = info.length
|
||||||
|
self._is_stream = info.isStream
|
||||||
|
self._is_seekable = info.isSeekable
|
||||||
|
end
|
||||||
|
|
||||||
|
return Track
|
||||||
|
|
@ -31,23 +31,49 @@ function split(str, character)
|
||||||
return result
|
return result
|
||||||
end
|
end
|
||||||
|
|
||||||
function random_value(tb)
|
function valueintb(tb, value)
|
||||||
local values = {}
|
local found = nil
|
||||||
for k, v in pairs(tb) do table.insert(values, v) end
|
for _, v in pairs(tb) do
|
||||||
print(values.index)
|
if v == value then
|
||||||
return tb[values[math.random(#values)]]
|
found = v
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if found then
|
||||||
|
return true
|
||||||
|
else
|
||||||
|
return false
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function random_key(tb)
|
function escape(s)
|
||||||
local keys = {}
|
return (string.gsub(s, "([^A-Za-z0-9_])", function(c)
|
||||||
for k in pairs(tb) do table.insert(keys, k) end
|
return string.format("%%%02x", string.byte(c))
|
||||||
return tb[keys[math.random(#keys)]]
|
end))
|
||||||
|
end
|
||||||
|
|
||||||
|
function starts_with(str, start)
|
||||||
|
return str:sub(1, #start) == start
|
||||||
|
end
|
||||||
|
|
||||||
|
function shift(tb)
|
||||||
|
local shifted = table.remove(tb, 1)
|
||||||
|
for i = 1, #tb do
|
||||||
|
tb[i] = tb[i + 1]
|
||||||
|
end
|
||||||
|
tb[#tb] = nil
|
||||||
|
return shifted
|
||||||
|
end
|
||||||
|
|
||||||
|
function randval(tb)
|
||||||
|
return tb[math.random(1, #tb)]
|
||||||
end
|
end
|
||||||
|
|
||||||
return {
|
return {
|
||||||
dump = dump,
|
dump = dump,
|
||||||
interp = interp,
|
interp = interp,
|
||||||
split = split,
|
split = split,
|
||||||
random_value = random_value,
|
valueintb = valueintb,
|
||||||
random_key = random_key
|
escape = escape,
|
||||||
|
starts_with = starts_with,
|
||||||
|
shift = shift
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue