mirror of
https://gitlab.com/niansa/asbots.git
synced 2025-03-06 20:48:25 +01:00
Minor improvements
This commit is contained in:
parent
fadab89638
commit
d2f38b272b
4 changed files with 27 additions and 17 deletions
17
instance.cpp
17
instance.cpp
|
@ -130,7 +130,7 @@ void User::parse_euid(const Event& event, NetworkInfo& netInfo) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void User::removeChannel(const u_Channel& channel) {
|
void User::removeChannel(const u_Channel& channel) {
|
||||||
std::remove_if(channels.begin(), channels.end(), [&] (auto obj) {return obj.get() == channel;});
|
std::remove_if(channels.begin(), channels.end(), [&] (auto obj) {return obj == &channel;});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -161,12 +161,12 @@ void Channel::parse_sjoin(const Event& event, Cache& cache, NetworkInfo& netInfo
|
||||||
}
|
}
|
||||||
u_User& member = *res;
|
u_User& member = *res;
|
||||||
// Append member to list
|
// Append member to list
|
||||||
members.push_back(member);
|
members.push_back(&member);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Channel::removeMember(const u_User& member) {
|
void Channel::removeMember(const u_User& member) {
|
||||||
std::remove_if(members.begin(), members.end(), [&] (auto obj) {return obj.get() == member;});
|
std::remove_if(members.begin(), members.end(), [&] (auto obj) {return *obj == member;});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -377,7 +377,7 @@ async::result<void> Instance::process(const Event event) {
|
||||||
}
|
}
|
||||||
// Delete user from all channels
|
// Delete user from all channels
|
||||||
for (auto& channel : res->get()->channels) {
|
for (auto& channel : res->get()->channels) {
|
||||||
channel.get()->removeMember({*res});
|
channel->get()->removeMember({*res});
|
||||||
}
|
}
|
||||||
// Delete user from cache
|
// Delete user from cache
|
||||||
cache.users.erase(res);
|
cache.users.erase(res);
|
||||||
|
@ -435,19 +435,20 @@ async::result<void> Instance::process(const Event event) {
|
||||||
throw DesyncError();
|
throw DesyncError();
|
||||||
}
|
}
|
||||||
// Assign user to channel and vice versa
|
// Assign user to channel and vice versa
|
||||||
c_res->get()->members.push_back(*u_res);
|
c_res->get()->members.push_back(&*u_res);
|
||||||
u_res->get()->channels.push_back(*c_res);
|
u_res->get()->channels.push_back(&*c_res);
|
||||||
// Update channel modes
|
// Update channel modes
|
||||||
c_res->get()->mode.parse<true>(split[2], netInfo);
|
c_res->get()->mode.parse<true>(split[2], netInfo);
|
||||||
} else if (event.name == "PART" || event.name == "KICK") {
|
} else if (event.name == "PART" || event.name == "KICK") {
|
||||||
// User left channel
|
// User left channel
|
||||||
|
auto split = strSplit(event.args, ' ', 1);
|
||||||
// Get channel from cache
|
// Get channel from cache
|
||||||
auto c_res = cache.find_channel_by_name(strSplit(event.args, ' ', 1)[0]);
|
auto c_res = cache.find_channel_by_name(split[0]);
|
||||||
if (c_res == cache.channels.end()) {
|
if (c_res == cache.channels.end()) {
|
||||||
throw DesyncError();
|
throw DesyncError();
|
||||||
}
|
}
|
||||||
// Get user from cache
|
// Get user from cache
|
||||||
auto u_res = cache.find_user_by_uid(std::get<UUID>(event.sender.id));
|
auto u_res = cache.find_user_by_uid((event.name=="PART")?std::get<UUID>(event.sender.id):split[1]);
|
||||||
if (u_res == cache.users.end()) {
|
if (u_res == cache.users.end()) {
|
||||||
throw DesyncError();
|
throw DesyncError();
|
||||||
}
|
}
|
||||||
|
|
12
instance.hpp
12
instance.hpp
|
@ -73,7 +73,7 @@ struct Channel {
|
||||||
std::string name;
|
std::string name;
|
||||||
ModeSet mode;
|
ModeSet mode;
|
||||||
std::string topic;
|
std::string topic;
|
||||||
std::vector<std::reference_wrapper<u_User>> members;
|
std::vector<u_User*> members;
|
||||||
|
|
||||||
void parse_sjoin(const Event &event, Cache& cache, NetworkInfo& netInfo);
|
void parse_sjoin(const Event &event, Cache& cache, NetworkInfo& netInfo);
|
||||||
void removeMember(const u_User& member);
|
void removeMember(const u_User& member);
|
||||||
|
@ -98,7 +98,7 @@ struct User {
|
||||||
std::string realhost;
|
std::string realhost;
|
||||||
UUID uid;
|
UUID uid;
|
||||||
std::string realname;
|
std::string realname;
|
||||||
std::vector<std::reference_wrapper<u_Channel>> channels;
|
std::vector<u_Channel*> channels;
|
||||||
|
|
||||||
void parse_euid(const Event &event, NetworkInfo& netInfo);
|
void parse_euid(const Event &event, NetworkInfo& netInfo);
|
||||||
void removeChannel(const u_Channel &channel);
|
void removeChannel(const u_Channel &channel);
|
||||||
|
@ -141,6 +141,14 @@ struct User {
|
||||||
.text = std::string(message)
|
.text = std::string(message)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Event get_notice(std::string_view message, AnyUID target) {
|
||||||
|
return {
|
||||||
|
.sender = uid,
|
||||||
|
.name = "NOTICE",
|
||||||
|
.args = std::string(target.str()),
|
||||||
|
.text = std::string(message)
|
||||||
|
};
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Cache {
|
struct Cache {
|
||||||
|
|
|
@ -28,7 +28,7 @@ async::result<void> TestService::intitialize() {
|
||||||
co_await mark_ready(user);
|
co_await mark_ready(user);
|
||||||
co_await i->send_event(serviceChannel.get_sjoin(uuid));
|
co_await i->send_event(serviceChannel.get_sjoin(uuid));
|
||||||
co_await i->send_event(user.get_join(serviceChannelName));
|
co_await i->send_event(user.get_join(serviceChannelName));
|
||||||
co_await i->send_event(user.get_privmsg("Test... Hello world!", serviceChannelName));
|
co_await i->send_event(user.get_notice("Test... Hello world!", serviceChannelName));
|
||||||
}
|
}
|
||||||
|
|
||||||
async::result<void> TestService::on_event(const Event& event) {
|
async::result<void> TestService::on_event(const Event& event) {
|
||||||
|
|
13
uid.hpp
13
uid.hpp
|
@ -70,23 +70,23 @@ struct AnyUID {
|
||||||
return str() == other.str();
|
return str() == other.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
auto operator =(const SUID& val) {
|
void assign(const SUID& val) {
|
||||||
type = SERVER;
|
type = SERVER;
|
||||||
id = val;
|
id = val;
|
||||||
}
|
}
|
||||||
auto operator =(const UUID& val) {
|
void assign(const UUID& val) {
|
||||||
type = USER;
|
type = USER;
|
||||||
id = val;
|
id = val;
|
||||||
}
|
}
|
||||||
auto operator =(std::string_view val) {
|
void assign(std::string_view val) {
|
||||||
type = OTHER;
|
type = OTHER;
|
||||||
id = std::string(val);
|
id = std::string(val);
|
||||||
}
|
}
|
||||||
auto operator =(const char *val) {
|
void assign(const char *val) {
|
||||||
type = OTHER;
|
type = OTHER;
|
||||||
id = std::string(val);
|
id = std::string(val);
|
||||||
}
|
}
|
||||||
auto operator =(std::nullptr_t) {
|
void assign(std::nullptr_t) {
|
||||||
type = NUL;
|
type = NUL;
|
||||||
id = nullptr;
|
id = nullptr;
|
||||||
}
|
}
|
||||||
|
@ -94,7 +94,8 @@ struct AnyUID {
|
||||||
AnyUID() {}
|
AnyUID() {}
|
||||||
template<typename T>
|
template<typename T>
|
||||||
AnyUID(const T& val) {
|
AnyUID(const T& val) {
|
||||||
*this = val;
|
assign(val);
|
||||||
}
|
}
|
||||||
|
explicit AnyUID(const AnyUID& o) : id(o.id), type(o.type) {}
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Reference in a new issue