diff --git a/src/citra_qt/multiplayer/chat_room.cpp b/src/citra_qt/multiplayer/chat_room.cpp index 5fae89045..7329bf86b 100644 --- a/src/citra_qt/multiplayer/chat_room.cpp +++ b/src/citra_qt/multiplayer/chat_room.cpp @@ -459,12 +459,15 @@ void ChatRoom::PopupContextMenu(const QPoint& menu_location) { }); } - if (has_mod_perms && nickname != cur_nickname) { // You can't kick or ban yourself + if (nickname != cur_nickname) { // You can't kick or ban yourself context_menu.addSeparator(); QAction* kick_action = context_menu.addAction(tr("Kick")); QAction* ban_action = context_menu.addAction(tr("Ban")); + kick_action->setEnabled(has_mod_perms); + ban_action->setEnabled(has_mod_perms); + connect(kick_action, &QAction::triggered, [this, nickname] { QMessageBox::StandardButton result = QMessageBox::question(this, tr("Kick Player"), diff --git a/src/citra_qt/multiplayer/client_room.cpp b/src/citra_qt/multiplayer/client_room.cpp index 312090cbe..1806b0511 100644 --- a/src/citra_qt/multiplayer/client_room.cpp +++ b/src/citra_qt/multiplayer/client_room.cpp @@ -47,8 +47,6 @@ ClientRoomWindow::ClientRoomWindow(QWidget* parent) ModerationDialog dialog(this); dialog.exec(); }); - ui->moderation->setDefault(false); - ui->moderation->setAutoDefault(false); connect(ui->chat, &ChatRoom::UserPinged, this, &ClientRoomWindow::ShowNotification); UpdateView(); } @@ -57,9 +55,7 @@ ClientRoomWindow::~ClientRoomWindow() = default; void ClientRoomWindow::SetModPerms(bool is_mod) { ui->chat->SetModPerms(is_mod); - ui->moderation->setVisible(is_mod); - ui->moderation->setDefault(false); - ui->moderation->setAutoDefault(false); + ui->moderation->setEnabled(is_mod); } void ClientRoomWindow::RetranslateUi() { diff --git a/src/citra_qt/multiplayer/client_room.ui b/src/citra_qt/multiplayer/client_room.ui index 97e88b502..76118d6e4 100644 --- a/src/citra_qt/multiplayer/client_room.ui +++ b/src/citra_qt/multiplayer/client_room.ui @@ -47,7 +47,7 @@ Moderation... - false + true diff --git a/src/citra_qt/multiplayer/host_room.cpp b/src/citra_qt/multiplayer/host_room.cpp index 339e7155a..5f29eed2d 100644 --- a/src/citra_qt/multiplayer/host_room.cpp +++ b/src/citra_qt/multiplayer/host_room.cpp @@ -144,7 +144,7 @@ void HostRoomWindow::Host() { bool created = room->Create(ui->room_name->text().toStdString(), ui->room_description->toPlainText().toStdString(), "", static_cast(port), password, ui->max_player->value(), - NetSettings::values.citra_username, game_name.toStdString(), + ui->username->text().toStdString(), game_name.toStdString(), game_id, CreateVerifyBackend(is_public), ban_list); if (!created) { NetworkMessage::ErrorManager::ShowError( diff --git a/src/citra_room/citra_room.cpp b/src/citra_room/citra_room.cpp index defd4d956..40866c008 100644 --- a/src/citra_room/citra_room.cpp +++ b/src/citra_room/citra_room.cpp @@ -178,7 +178,6 @@ int main(int argc, char** argv) { u64 preferred_game_id = 0; u16 port = Network::DefaultRoomPort; u32 max_members = 16; - bool enable_citra_mods = false; static struct option long_options[] = { {"room-name", required_argument, 0, 'n'}, @@ -243,9 +242,6 @@ int main(int argc, char** argv) { case 'l': log_file.assign(optarg); break; - case 'e': - enable_citra_mods = true; - break; case 'h': PrintHelp(argv[0]); return 0; @@ -317,10 +313,6 @@ int main(int argc, char** argv) { NetSettings::values.citra_token = token; } } - if (!announce && enable_citra_mods) { - enable_citra_mods = false; - std::cout << "Can not enable Citra Moderators for private rooms\n\n"; - } InitializeLogging(log_file); @@ -347,8 +339,7 @@ int main(int argc, char** argv) { Network::Init(); if (std::shared_ptr room = Network::GetRoom().lock()) { if (!room->Create(room_name, room_description, "", port, password, max_members, username, - preferred_game, preferred_game_id, std::move(verify_backend), ban_list, - enable_citra_mods)) { + preferred_game, preferred_game_id, std::move(verify_backend), ban_list)) { std::cout << "Failed to create room: \n\n"; return -1; } diff --git a/src/network/room.cpp b/src/network/room.cpp index 4623b31d4..2830bd287 100644 --- a/src/network/room.cpp +++ b/src/network/room.cpp @@ -371,7 +371,14 @@ void Room::RoomImpl::HandleJoinRequest(const ENetEvent* event) { std::lock_guard lock(verify_UID_mutex); uid = verify_UID; } - member.user_data = verify_backend->LoadUserData(uid, token); + + if (verify_backend != nullptr) + member.user_data = verify_backend->LoadUserData(uid, token); + + if (nickname == room_information.host_username) { + member.user_data.moderator = true; + LOG_INFO(Network, "User {} is a moderator", std::string(room_information.host_username)); + } std::string ip; { @@ -598,8 +605,7 @@ bool Room::RoomImpl::HasModPermission(const ENetPeer* client) const { if (sending_member == members.end()) { return false; } - if (room_information.enable_citra_mods && - sending_member->user_data.moderator) { // Community moderator + if (sending_member->user_data.moderator) { // Community moderator return true; } @@ -1013,7 +1019,7 @@ bool Room::Create(const std::string& name, const std::string& description, const u32 max_connections, const std::string& host_username, const std::string& preferred_game, u64 preferred_game_id, std::unique_ptr verify_backend, - const Room::BanList& ban_list, bool enable_citra_mods) { + const Room::BanList& ban_list) { ENetAddress address; address.host = ENET_HOST_ANY; if (!server_address.empty()) { @@ -1036,7 +1042,6 @@ bool Room::Create(const std::string& name, const std::string& description, room_impl->room_information.preferred_game = preferred_game; room_impl->room_information.preferred_game_id = preferred_game_id; room_impl->room_information.host_username = host_username; - room_impl->room_information.enable_citra_mods = enable_citra_mods; room_impl->password = password; room_impl->verify_backend = std::move(verify_backend); room_impl->username_ban_list = ban_list.first; diff --git a/src/network/room.h b/src/network/room.h index a67984837..5781631d7 100644 --- a/src/network/room.h +++ b/src/network/room.h @@ -32,7 +32,6 @@ struct RoomInformation { std::string preferred_game; ///< Game to advertise that you want to play u64 preferred_game_id; ///< Title ID for the advertised game std::string host_username; ///< Forum username of the host - bool enable_citra_mods; ///< Allow Citra Moderators to moderate on this room }; struct GameInfo { @@ -148,7 +147,7 @@ public: const std::string& host_username = "", const std::string& preferred_game = "", u64 preferred_game_id = 0, std::unique_ptr verify_backend = nullptr, - const BanList& ban_list = {}, bool enable_citra_mods = false); + const BanList& ban_list = {}); /** * Sets the verification GUID of the room.