1
0
Fork 0
mirror of https://gitlab.com/niansa/asbots.git synced 2025-03-06 20:48:25 +01:00

Minor improvements

This commit is contained in:
Nils 2021-06-20 18:12:24 +02:00
parent fadab89638
commit d2f38b272b
4 changed files with 27 additions and 17 deletions

View file

@ -130,7 +130,7 @@ void User::parse_euid(const Event& event, NetworkInfo& netInfo) {
}
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;
// Append member to list
members.push_back(member);
members.push_back(&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
for (auto& channel : res->get()->channels) {
channel.get()->removeMember({*res});
channel->get()->removeMember({*res});
}
// Delete user from cache
cache.users.erase(res);
@ -435,19 +435,20 @@ async::result<void> Instance::process(const Event event) {
throw DesyncError();
}
// Assign user to channel and vice versa
c_res->get()->members.push_back(*u_res);
u_res->get()->channels.push_back(*c_res);
c_res->get()->members.push_back(&*u_res);
u_res->get()->channels.push_back(&*c_res);
// Update channel modes
c_res->get()->mode.parse<true>(split[2], netInfo);
} else if (event.name == "PART" || event.name == "KICK") {
// User left channel
auto split = strSplit(event.args, ' ', 1);
// 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()) {
throw DesyncError();
}
// 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()) {
throw DesyncError();
}

View file

@ -73,7 +73,7 @@ struct Channel {
std::string name;
ModeSet mode;
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 removeMember(const u_User& member);
@ -98,7 +98,7 @@ struct User {
std::string realhost;
UUID uid;
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 removeChannel(const u_Channel &channel);
@ -141,6 +141,14 @@ struct User {
.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 {

View file

@ -28,7 +28,7 @@ async::result<void> TestService::intitialize() {
co_await mark_ready(user);
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_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) {

13
uid.hpp
View file

@ -70,23 +70,23 @@ struct AnyUID {
return str() == other.str();
}
auto operator =(const SUID& val) {
void assign(const SUID& val) {
type = SERVER;
id = val;
}
auto operator =(const UUID& val) {
void assign(const UUID& val) {
type = USER;
id = val;
}
auto operator =(std::string_view val) {
void assign(std::string_view val) {
type = OTHER;
id = std::string(val);
}
auto operator =(const char *val) {
void assign(const char *val) {
type = OTHER;
id = std::string(val);
}
auto operator =(std::nullptr_t) {
void assign(std::nullptr_t) {
type = NUL;
id = nullptr;
}
@ -94,7 +94,8 @@ struct AnyUID {
AnyUID() {}
template<typename T>
AnyUID(const T& val) {
*this = val;
assign(val);
}
explicit AnyUID(const AnyUID& o) : id(o.id), type(o.type) {}
};
#endif