Merge pull request #1527 from woogerboy21/ban_mod_notify
Moderator ban notifications + Server PM functionality
This commit is contained in:
commit
ead6ab3ad6
6 changed files with 84 additions and 26 deletions
|
@ -130,7 +130,7 @@ void ChatView::appendMessage(QString message, RoomMessageTypeFlags messageType,
|
||||||
lastSender = sender;
|
lastSender = sender;
|
||||||
|
|
||||||
// timestamp
|
// timestamp
|
||||||
if (showTimestamps && !sameSender && !sender.isEmpty()) {
|
if (showTimestamps && (!sameSender || sender.toLower() == "servatrice") && !sender.isEmpty()) {
|
||||||
QTextCharFormat timeFormat;
|
QTextCharFormat timeFormat;
|
||||||
timeFormat.setForeground(QColor(SERVER_MESSAGE_COLOR));
|
timeFormat.setForeground(QColor(SERVER_MESSAGE_COLOR));
|
||||||
if (sender.isEmpty())
|
if (sender.isEmpty())
|
||||||
|
@ -139,31 +139,35 @@ void ChatView::appendMessage(QString message, RoomMessageTypeFlags messageType,
|
||||||
cursor.insertText(QDateTime::currentDateTime().toString("[hh:mm:ss] "));
|
cursor.insertText(QDateTime::currentDateTime().toString("[hh:mm:ss] "));
|
||||||
}
|
}
|
||||||
|
|
||||||
// nickname
|
// nickname
|
||||||
QTextCharFormat senderFormat;
|
if (sender.toLower() != "servatrice") {
|
||||||
if (tabSupervisor && tabSupervisor->getUserInfo() && (sender == QString::fromStdString(tabSupervisor->getUserInfo()->name()))) {
|
QTextCharFormat senderFormat;
|
||||||
senderFormat.setForeground(QBrush(getCustomMentionColor()));
|
if (tabSupervisor && tabSupervisor->getUserInfo() &&
|
||||||
senderFormat.setFontWeight(QFont::Bold);
|
(sender == QString::fromStdString(tabSupervisor->getUserInfo()->name()))) {
|
||||||
} else {
|
senderFormat.setForeground(QBrush(getCustomMentionColor()));
|
||||||
senderFormat.setForeground(QBrush(OTHER_USER_COLOR));
|
|
||||||
if (playerBold)
|
|
||||||
senderFormat.setFontWeight(QFont::Bold);
|
senderFormat.setFontWeight(QFont::Bold);
|
||||||
}
|
} else {
|
||||||
senderFormat.setAnchor(true);
|
senderFormat.setForeground(QBrush(OTHER_USER_COLOR));
|
||||||
senderFormat.setAnchorHref("user://" + QString::number(userLevel) + "_" + sender);
|
if (playerBold)
|
||||||
if (sameSender) {
|
senderFormat.setFontWeight(QFont::Bold);
|
||||||
cursor.insertText(" ");
|
}
|
||||||
} else {
|
senderFormat.setAnchor(true);
|
||||||
if (!sender.isEmpty() && tabSupervisor->getUserListsTab()) {
|
senderFormat.setAnchorHref("user://" + QString::number(userLevel) + "_" + sender);
|
||||||
const int pixelSize = QFontInfo(cursor.charFormat().font()).pixelSize();
|
if (sameSender) {
|
||||||
QMap<QString, UserListTWI *> buddyList = tabSupervisor->getUserListsTab()->getBuddyList()->getUsers();
|
cursor.insertText(" ");
|
||||||
cursor.insertImage(UserLevelPixmapGenerator::generatePixmap(pixelSize, userLevel, buddyList.contains(sender)).toImage());
|
} else {
|
||||||
cursor.insertText(" ");
|
if (!sender.isEmpty() && tabSupervisor->getUserListsTab()) {
|
||||||
|
const int pixelSize = QFontInfo(cursor.charFormat().font()).pixelSize();
|
||||||
|
QMap<QString, UserListTWI *> buddyList = tabSupervisor->getUserListsTab()->getBuddyList()->getUsers();
|
||||||
|
cursor.insertImage(UserLevelPixmapGenerator::generatePixmap(pixelSize, userLevel,
|
||||||
|
buddyList.contains(sender)).toImage());
|
||||||
|
cursor.insertText(" ");
|
||||||
|
}
|
||||||
|
cursor.setCharFormat(senderFormat);
|
||||||
|
if (!sender.isEmpty())
|
||||||
|
sender.append(": ");
|
||||||
|
cursor.insertText(sender);
|
||||||
}
|
}
|
||||||
cursor.setCharFormat(senderFormat);
|
|
||||||
if (!sender.isEmpty())
|
|
||||||
sender.append(": ");
|
|
||||||
cursor.insertText(sender);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// use different color for server messages
|
// use different color for server messages
|
||||||
|
@ -180,6 +184,9 @@ void ChatView::appendMessage(QString message, RoomMessageTypeFlags messageType,
|
||||||
defaultFormat.setFontItalic(true);
|
defaultFormat.setFontItalic(true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
} else if (sender.toLower() == "servatrice") {
|
||||||
|
defaultFormat.setForeground(Qt::darkGreen);
|
||||||
|
defaultFormat.setFontWeight(QFont::Bold);
|
||||||
}
|
}
|
||||||
cursor.setCharFormat(defaultFormat);
|
cursor.setCharFormat(defaultFormat);
|
||||||
|
|
||||||
|
|
|
@ -116,6 +116,8 @@ void TabMessage::processUserMessageEvent(const Event_UserMessage &event)
|
||||||
soundEngine->playSound("private_message");
|
soundEngine->playSound("private_message");
|
||||||
if (settingsCache->getShowMessagePopup() && shouldShowSystemPopup(event))
|
if (settingsCache->getShowMessagePopup() && shouldShowSystemPopup(event))
|
||||||
showSystemPopup(event);
|
showSystemPopup(event);
|
||||||
|
if (QString::fromStdString(event.sender_name()).simplified() == "Servatrice")
|
||||||
|
sayEdit->setDisabled(true);
|
||||||
|
|
||||||
emit userEvent();
|
emit userEvent();
|
||||||
}
|
}
|
||||||
|
|
|
@ -262,6 +262,18 @@ void Server::removeClient(Server_ProtocolHandler *client)
|
||||||
qDebug() << "Server::removeClient: removed" << (void *) client << ";" << clients.size() << "clients; " << users.size() << "users left";
|
qDebug() << "Server::removeClient: removed" << (void *) client << ";" << clients.size() << "clients; " << users.size() << "users left";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QList<QString> Server::getOnlineModeratorList()
|
||||||
|
{
|
||||||
|
QList<QString> results;
|
||||||
|
QReadLocker clientsLocker(&clientsLock);
|
||||||
|
for (int i = 0; i < clients.size(); ++i) {
|
||||||
|
ServerInfo_User *data = clients[i]->getUserInfo();
|
||||||
|
if (data->user_level() & ServerInfo_User::IsModerator || data->user_level() & ServerInfo_User::IsAdmin) //TODO: this line should be updated in the event there is any type of new user level created
|
||||||
|
results << QString::fromStdString(data->name()).simplified();
|
||||||
|
}
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
void Server::externalUserJoined(const ServerInfo_User &userInfo)
|
void Server::externalUserJoined(const ServerInfo_User &userInfo)
|
||||||
{
|
{
|
||||||
// This function is always called from the main thread via signal/slot.
|
// This function is always called from the main thread via signal/slot.
|
||||||
|
@ -617,4 +629,4 @@ void Server::sendIsl_RoomCommand(const CommandContainer &item, int serverId, qin
|
||||||
cont->set_room_id(roomId);
|
cont->set_room_id(roomId);
|
||||||
|
|
||||||
emit sigSendIslMessage(msg, serverId);
|
emit sigSendIslMessage(msg, serverId);
|
||||||
}
|
}
|
|
@ -55,6 +55,7 @@ public:
|
||||||
virtual QMap<QString, bool> getServerRequiredFeatureList() const { return QMap<QString, bool>(); }
|
virtual QMap<QString, bool> getServerRequiredFeatureList() const { return QMap<QString, bool>(); }
|
||||||
void addClient(Server_ProtocolHandler *player);
|
void addClient(Server_ProtocolHandler *player);
|
||||||
void removeClient(Server_ProtocolHandler *player);
|
void removeClient(Server_ProtocolHandler *player);
|
||||||
|
QList<QString> getOnlineModeratorList();
|
||||||
virtual QString getLoginMessage() const { return QString(); }
|
virtual QString getLoginMessage() const { return QString(); }
|
||||||
virtual bool permitUnregisteredUsers() const { return true; }
|
virtual bool permitUnregisteredUsers() const { return true; }
|
||||||
virtual bool getGameShouldPing() const { return false; }
|
virtual bool getGameShouldPing() const { return false; }
|
||||||
|
|
|
@ -51,6 +51,7 @@
|
||||||
#include "pb/event_add_to_list.pb.h"
|
#include "pb/event_add_to_list.pb.h"
|
||||||
#include "pb/event_remove_from_list.pb.h"
|
#include "pb/event_remove_from_list.pb.h"
|
||||||
#include "pb/event_notify_user.pb.h"
|
#include "pb/event_notify_user.pb.h"
|
||||||
|
#include "pb/event_user_message.pb.h"
|
||||||
#include "pb/response_ban_history.pb.h"
|
#include "pb/response_ban_history.pb.h"
|
||||||
#include "pb/response_deck_list.pb.h"
|
#include "pb/response_deck_list.pb.h"
|
||||||
#include "pb/response_deck_download.pb.h"
|
#include "pb/response_deck_download.pb.h"
|
||||||
|
@ -520,6 +521,20 @@ void ServerSocketInterface::deckDelDirHelper(int basePathId)
|
||||||
sqlInterface->execSqlQuery(query);
|
sqlInterface->execSqlQuery(query);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ServerSocketInterface::sendServerMessage(const QString userName, const QString message)
|
||||||
|
{
|
||||||
|
ServerSocketInterface *user = static_cast<ServerSocketInterface *>(server->getUsers().value(userName));
|
||||||
|
if (user) {
|
||||||
|
Event_UserMessage event;
|
||||||
|
event.set_sender_name("Servatrice");
|
||||||
|
event.set_receiver_name(userName.toStdString());
|
||||||
|
event.set_message(message.toStdString());
|
||||||
|
SessionEvent *se = user->prepareSessionEvent(event);
|
||||||
|
user->sendProtocolItem(*se);
|
||||||
|
delete se;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Response::ResponseCode ServerSocketInterface::cmdDeckDelDir(const Command_DeckDelDir &cmd, ResponseContainer & /*rc*/)
|
Response::ResponseCode ServerSocketInterface::cmdDeckDelDir(const Command_DeckDelDir &cmd, ResponseContainer & /*rc*/)
|
||||||
{
|
{
|
||||||
if (authState != PasswordRight)
|
if (authState != PasswordRight)
|
||||||
|
@ -795,7 +810,7 @@ Response::ResponseCode ServerSocketInterface::cmdBanFromServer(const Command_Ban
|
||||||
|
|
||||||
if (!userName.isEmpty()) {
|
if (!userName.isEmpty()) {
|
||||||
ServerSocketInterface *user = static_cast<ServerSocketInterface *>(server->getUsers().value(userName));
|
ServerSocketInterface *user = static_cast<ServerSocketInterface *>(server->getUsers().value(userName));
|
||||||
if (user)
|
if (user && !userList.contains(user))
|
||||||
userList.append(user);
|
userList.append(user);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -831,6 +846,23 @@ Response::ResponseCode ServerSocketInterface::cmdBanFromServer(const Command_Ban
|
||||||
}
|
}
|
||||||
servatrice->clientsLock.unlock();
|
servatrice->clientsLock.unlock();
|
||||||
|
|
||||||
|
QList<QString> moderatorList = server->getOnlineModeratorList();
|
||||||
|
QListIterator<QString> modIterator(moderatorList);
|
||||||
|
foreach(QString moderator, moderatorList) {
|
||||||
|
QString notificationMessage = "A ban has been put in with the following details:";
|
||||||
|
if (!userName.isEmpty())
|
||||||
|
notificationMessage.append("\n Username: " + userName);
|
||||||
|
if (!address.isEmpty())
|
||||||
|
notificationMessage.append("\n IP Address: " + address);
|
||||||
|
if (!clientID.isEmpty())
|
||||||
|
notificationMessage.append("\n Client ID: " + clientID);
|
||||||
|
|
||||||
|
notificationMessage.append("\n Length: " + QString::number(minutes) + " minute(s)");
|
||||||
|
notificationMessage.append("\n Internal Reason: " + QString::fromStdString(cmd.reason()));
|
||||||
|
notificationMessage.append("\n Visible Reason: " + QString::fromStdString(cmd.visible_reason()));
|
||||||
|
sendServerMessage(moderator.simplified(), notificationMessage);
|
||||||
|
}
|
||||||
|
|
||||||
return Response::RespOk;
|
return Response::RespOk;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -863,6 +895,9 @@ Response::ResponseCode ServerSocketInterface::cmdRegisterAccount(const Command_R
|
||||||
return Response::RespUsernameInvalid;
|
return Response::RespUsernameInvalid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (userName.toLower() == "servatrice")
|
||||||
|
return Response::RespUsernameInvalid;
|
||||||
|
|
||||||
if(sqlInterface->userExists(userName))
|
if(sqlInterface->userExists(userName))
|
||||||
return Response::RespUserAlreadyExists;
|
return Response::RespUserAlreadyExists;
|
||||||
|
|
||||||
|
|
|
@ -86,6 +86,7 @@ private:
|
||||||
Response::ResponseCode cmdDeckList(const Command_DeckList &cmd, ResponseContainer &rc);
|
Response::ResponseCode cmdDeckList(const Command_DeckList &cmd, ResponseContainer &rc);
|
||||||
Response::ResponseCode cmdDeckNewDir(const Command_DeckNewDir &cmd, ResponseContainer &rc);
|
Response::ResponseCode cmdDeckNewDir(const Command_DeckNewDir &cmd, ResponseContainer &rc);
|
||||||
void deckDelDirHelper(int basePathId);
|
void deckDelDirHelper(int basePathId);
|
||||||
|
void sendServerMessage(const QString userName, const QString message);
|
||||||
Response::ResponseCode cmdDeckDelDir(const Command_DeckDelDir &cmd, ResponseContainer &rc);
|
Response::ResponseCode cmdDeckDelDir(const Command_DeckDelDir &cmd, ResponseContainer &rc);
|
||||||
Response::ResponseCode cmdDeckDel(const Command_DeckDel &cmd, ResponseContainer &rc);
|
Response::ResponseCode cmdDeckDel(const Command_DeckDel &cmd, ResponseContainer &rc);
|
||||||
Response::ResponseCode cmdDeckUpload(const Command_DeckUpload &cmd, ResponseContainer &rc);
|
Response::ResponseCode cmdDeckUpload(const Command_DeckUpload &cmd, ResponseContainer &rc);
|
||||||
|
|
Loading…
Reference in a new issue