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) {
|
||||
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();
|
||||
}
|
||||
|
|
12
instance.hpp
12
instance.hpp
|
@ -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 {
|
||||
|
|
|
@ -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
13
uid.hpp
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue