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'),
|
||||
Node = require('node'),
|
||||
Player = require('player'),
|
||||
Playlist = require('playlist'),
|
||||
Pool = require('pool'),
|
||||
RoutePlanner = require('routeplanner'),
|
||||
Track = require('track'),
|
||||
Utils = require('utils')
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,14 +1,18 @@
|
|||
---@diagnostic disable: need-check-nil
|
||||
local discordia = require('discordia')
|
||||
local websocket = require('coro-websocket')
|
||||
local http = require('coro-http')
|
||||
local json = require('json')
|
||||
local querystring = require('querystring')
|
||||
local utils = require('utils')
|
||||
local enums = require('enums')
|
||||
local interp = utils.interp
|
||||
local split = utils.split
|
||||
local dump = utils.dump
|
||||
local url = require('url')
|
||||
local SearchType = enums.SearchType
|
||||
local Track = require('track')
|
||||
local Playlist = require('playlist')
|
||||
local package = require('../../package')
|
||||
|
||||
local Emitter = discordia.Emitter
|
||||
local class = discordia.class
|
||||
|
|
@ -52,7 +56,7 @@ function Node:__init(client, options)
|
|||
{ 'Authorization', self._password },
|
||||
{ 'Num-Shards', self._client.shardCount },
|
||||
{ 'User-Id', self._client.user.id },
|
||||
{ 'Client-Name', "Flare/1.0.0" }
|
||||
{ 'Client-Name', format("Flare/%s", package.version) }
|
||||
}
|
||||
|
||||
self._res = nil
|
||||
|
|
@ -76,7 +80,6 @@ function Node:_listen()
|
|||
self:emit('stats', self._stats)
|
||||
elseif payload.op == 'ready' then
|
||||
self._session_id = payload.sessionId
|
||||
print(self._session_id)
|
||||
elseif payload.op == 'event' then
|
||||
self:emit('event', payload)
|
||||
end
|
||||
|
|
@ -84,7 +87,6 @@ function Node:_listen()
|
|||
self:disconnect()
|
||||
end
|
||||
end
|
||||
self:close()
|
||||
end
|
||||
|
||||
function Node:connect()
|
||||
|
|
@ -133,9 +135,7 @@ function Node:_send(method, path, _guild_id, _query, _data, include_version)
|
|||
end
|
||||
|
||||
if _query then
|
||||
query = querystring.stringify({
|
||||
identifier = _query
|
||||
})
|
||||
query = "?" .. _query
|
||||
end
|
||||
|
||||
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)
|
||||
|
||||
if res.code == 200 then
|
||||
if type(body) == "string" then
|
||||
return body
|
||||
else
|
||||
return json.decode(body)
|
||||
end
|
||||
return json.decode(body)
|
||||
elseif res.code == 204 or method == "DELETE" then
|
||||
return nil
|
||||
else
|
||||
|
|
@ -158,13 +154,52 @@ end
|
|||
|
||||
function Node:get_tracks(_query, search_type)
|
||||
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
|
||||
|
||||
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 Node = require('node')
|
||||
local Pool, get = class('Pool')
|
||||
local dump = require('utils').dump
|
||||
local random_value = require('utils').random_value
|
||||
local Pool = class('Pool')
|
||||
|
||||
local format = string.format
|
||||
|
||||
|
|
@ -21,17 +19,16 @@ function Pool:create_node(client, options)
|
|||
end
|
||||
|
||||
options.pool = self
|
||||
local id = options.identifier
|
||||
self._nodes[id] = Node(client, options)
|
||||
local node = Node(client, options)
|
||||
self._nodes[options.identifier] = node
|
||||
return node
|
||||
end
|
||||
|
||||
function Pool:get_node(identifier)
|
||||
if self._nodes[identifier] then
|
||||
return self._nodes[identifier]
|
||||
else
|
||||
print("getting random node")
|
||||
local node = random_value(self._nodes)
|
||||
print(node)
|
||||
return self._nodes[next(self._nodes)]
|
||||
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
|
||||
end
|
||||
|
||||
function random_value(tb)
|
||||
local values = {}
|
||||
for k, v in pairs(tb) do table.insert(values, v) end
|
||||
print(values.index)
|
||||
return tb[values[math.random(#values)]]
|
||||
function valueintb(tb, value)
|
||||
local found = nil
|
||||
for _, v in pairs(tb) do
|
||||
if v == value then
|
||||
found = v
|
||||
end
|
||||
end
|
||||
if found then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
function random_key(tb)
|
||||
local keys = {}
|
||||
for k in pairs(tb) do table.insert(keys, k) end
|
||||
return tb[keys[math.random(#keys)]]
|
||||
function escape(s)
|
||||
return (string.gsub(s, "([^A-Za-z0-9_])", function(c)
|
||||
return string.format("%%%02x", string.byte(c))
|
||||
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
|
||||
|
||||
return {
|
||||
dump = dump,
|
||||
interp = interp,
|
||||
split = split,
|
||||
random_value = random_value,
|
||||
random_key = random_key
|
||||
valueintb = valueintb,
|
||||
escape = escape,
|
||||
starts_with = starts_with,
|
||||
shift = shift
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue