man idek what i added

This commit is contained in:
cloudwithax 2023-03-28 11:17:18 -04:00
parent b80a4c3cce
commit fe3f7d0b48
7 changed files with 135 additions and 35 deletions

View File

@ -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')
} }

View File

@ -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

19
libs/playlist.lua Normal file
View File

@ -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

View File

@ -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
libs/routeplanner.lua Normal file
View File

20
libs/track.lua Normal file
View File

@ -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

View File

@ -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
} }