Make Lua CommandContext use a ChannelRef (#5184)

This commit is contained in:
Mm2PL
2024-02-18 20:55:00 +01:00
committed by GitHub
parent cd0387b064
commit 4a4f62dc4a
6 changed files with 27 additions and 25 deletions
+1 -1
View File
@@ -35,7 +35,7 @@ enum class EventType {
/**
* @lua@class CommandContext
* @lua@field words string[] The words typed when executing the command. For example `/foo bar baz` will result in `{"/foo", "bar", "baz"}`.
* @lua@field channel_name string The name of the channel the command was executed in.
* @lua@field channel Channel The channel the command was executed in.
*/
/**
+4 -2
View File
@@ -4,6 +4,7 @@
# include "common/Channel.hpp"
# include "common/QLogging.hpp"
# include "controllers/commands/CommandContext.hpp"
# include "controllers/plugins/api/ChannelRef.hpp"
# include "controllers/plugins/LuaAPI.hpp"
# include <lauxlib.h>
@@ -120,8 +121,9 @@ StackIdx push(lua_State *L, const CommandContext &ctx)
push(L, ctx.words);
lua_setfield(L, outIdx, "words");
push(L, ctx.channel->getName());
lua_setfield(L, outIdx, "channel_name");
push(L, ctx.channel);
lua_setfield(L, outIdx, "channel");
return outIdx;
}
+19 -20
View File
@@ -297,16 +297,7 @@ int ChannelRef::get_by_name(lua_State *L)
return 1;
}
auto chn = getApp()->twitch->getChannelOrEmpty(name);
if (chn->isEmpty())
{
lua_pushnil(L);
return 1;
}
// pushes onto stack
WeakPtrUserData<UserData::Type::Channel, Channel>::create(
L, chn->weak_from_this());
luaL_getmetatable(L, "c2.Channel");
lua_setmetatable(L, -2);
lua::push(L, chn);
return 1;
}
@@ -330,16 +321,8 @@ int ChannelRef::get_by_twitch_id(lua_State *L)
return 1;
}
auto chn = getApp()->twitch->getChannelOrEmptyByID(id);
if (chn->isEmpty())
{
lua_pushnil(L);
return 1;
}
// pushes onto stack
WeakPtrUserData<UserData::Type::Channel, Channel>::create(
L, chn->weak_from_this());
luaL_getmetatable(L, "c2.Channel");
lua_setmetatable(L, -2);
lua::push(L, chn);
return 1;
}
@@ -390,5 +373,21 @@ StackIdx push(lua_State *L, const api::LuaStreamStatus &status)
return out;
}
StackIdx push(lua_State *L, ChannelPtr chn)
{
using namespace chatterino::lua::api;
if (chn->isEmpty())
{
lua_pushnil(L);
return lua_gettop(L);
}
WeakPtrUserData<UserData::Type::Channel, Channel>::create(
L, chn->weak_from_this());
luaL_getmetatable(L, "c2.Channel");
lua_setmetatable(L, -2);
return lua_gettop(L);
}
} // namespace chatterino::lua
#endif
@@ -271,5 +271,6 @@ struct LuaStreamStatus {
namespace chatterino::lua {
StackIdx push(lua_State *L, const api::LuaRoomModes &modes);
StackIdx push(lua_State *L, const api::LuaStreamStatus &status);
StackIdx push(lua_State *L, ChannelPtr chn);
} // namespace chatterino::lua
#endif