void CKickBan::endVote() { if(vote == NULL) return; if(vote -> numVotes() < settings -> GetInt("vote_min_votes")) core -> sendMsgChannel("Zbyt niska frekwencja."); else { if(vote -> resultFor() < settings -> GetDouble("vote_pass_min")) core -> sendMsgChannel("Wynik głosowania: przeciw."); else { core -> sendMsgChannel("Wynik głosowania: za."); switch(voteType) { case Kick: core -> kickUser(voteTarget, "Lud przemówił."); break; case Ban: ban(voteTarget, voteMask); core -> kickUser(voteTarget, "Lud przemówił."); break; case Unban: unban(voteTarget); break; } } } state = Waiting; delete vote; vote = NULL; }
void Areal::dispatch(QList<QByteArray> list, AbsConnection *who) { removeFromBanlist(); if (list.length() == 0) { return; } QByteArray cmd = list.at(0); if (cmd == "CC") { if (list.length() == 2) { bool exists = false; QByteArray name = list.at(1); QHash<quint32, Channel*>::iterator it; for (it=m_channels.begin();it!=m_channels.end();++it) { if (name == it.value()->name()) { exists = true; it.value()->add(who); who->send(QVariantList() << "CC" << name << it.value()->id()); break; } } if (!exists) { ++m_next_channel; Channel * channel = m_channels[m_next_channel] = new Channel(m_next_channel, name, this); channel->add(who); who->send(QVariantList() << "CC" << name << channel->id()); } } } else if (cmd == "LC") { if (list.length() == 2) { QByteArray name = list.at(1); QHash<quint32, Channel*>::iterator it; for (it=m_channels.begin();it!=m_channels.end();++it) { Channel * channel = it.value(); if (name == channel->name()) { channel->remove(who); if (channel->isEmpty()) { channel->deleteLater(); m_channels.remove(it.key()); } who->send(QVariantList() << "LC" << "OK"); break; } } } } else if (cmd == "SM") { if (list.length() == 3) { quint32 id = list.at(1).toInt(); if (m_channels.contains(id)) { QByteArray text = list.at(2); Channel * channel = m_channels.value(id); if (text.left(1) == "/") { if (text.left(4) == "/ban") { ban(text, who); } else if (text.left(6) == "/unban") { unban(text, who); } else { m_cmd.dispatch(text, who, channel); } } else { channel->sendMessage(who, text); } } } } else if (cmd == "PM") { if (list.length() == 3) { QByteArray name = list.at(1); QByteArray text = list.at(2); QLinkedList<AbsConnection*>::iterator it; for (it=m_connections.begin();it!=m_connections.end();++it) { AbsConnection * conn = (*it); if (conn->name() == name) { conn->send(QVariantList() << "PM" << who->name() << text); who->send(QVariantList() << "PM" << "OK" << text); break; } } who->send(QVariantList() << "PM" << "ERR" << "NOT FOUND"); } } else if (cmd == "UL") { if (list.length() == 2) { quint32 id = list.at(1).toInt(); if (m_channels.contains(id)) { Channel * channel = m_channels.value(id); who->send(QVariantList() << "UL" << id << channel->getUserList()); } } } }
PlayersWindow::PlayersWindow(QWidget *parent, int expireDays) : QWidget (parent) { setAttribute(Qt::WA_DeleteOnClose, true); resize(726, this->height()); QGridLayout *mylayout = new QGridLayout(this); const auto &members = SecurityManager::getMembers(); mytable = new QCompactTable(members.size(),7); mytable->setShowGrid(true); mylayout->addWidget(mytable,0,0,1,6); QMap<int, QString> authgrade; authgrade[0] = "User"; authgrade[1] = "Mod"; authgrade[2] = "Admin"; authgrade[3] = "Owner"; QStringList headers; headers << "Player" << "Authority" << "Banned Status" << "Registered" << "IP" << "Last Appearance" << "Expires In"; mytable->setHorizontalHeaderLabels(headers); int i = 0; for (auto it = members.begin(); it != members.end(); ++it) { const SecurityManager::Member &m = it->second; QTableWidgetItem *witem = new QTableWidgetItem(m.name); mytable->setItem(i, 0, witem); witem = new QTableWidgetItem(authgrade[m.authority()]); mytable->setItem(i, 1, witem); QString bannedString = "Banned"; int expiration = m.ban_expire_time - QDateTime::currentDateTimeUtc().toTime_t(); if(expiration < 0) { if (m.ban_expire_time != 0) bannedString = "Expires on Login"; } else { if(expiration < 60) { if(expiration == 1) { bannedString.append(QString(" (%1 second)").arg(expiration)); } else { bannedString.append(QString(" (%2 seconds)").arg(expiration)); } } else { if(expiration >= 60) { expiration = expiration / 60; if(expiration == 1) { bannedString.append(QString(" (%1 minute)").arg(expiration)); } else { bannedString.append(QString(" (%2 minutes)").arg(expiration)); } } } } witem = new QTableWidgetItem(m.banned ? bannedString : "Fine"); mytable->setItem(i, 2, witem); witem = new QTableWidgetItem(m.isProtected() > 0 ? "Yes" : "No"); mytable->setItem(i, 3, witem); witem = new QTableWidgetItem(m.ip); mytable->setItem(i, 4, witem); witem = new QTableWidgetItem(m.date); mytable->setItem(i, 5, witem); witem = new QTableWidgetItem(QString::number(expireDays - QDate::fromString(m.date, Qt::ISODate).daysTo(QDate::currentDate())) + " Days"); mytable->setItem(i, 6, witem); i++; } //mytable->sortByColumn(0, Qt::AscendingOrder); //mytable->setSortingEnabled(true); QPushButton *_authority = new QPushButton(tr("&Authority")); QMenu *m = new QMenu(_authority); m->addAction(tr("User"), this, SLOT(user())); m->addAction(tr("Moderator"), this, SLOT(mod())); m->addAction(tr("Administrator"), this, SLOT(admin())); m->addAction(tr("Owner"), this, SLOT(owner())); _authority->setMenu(m); QPushButton *_ban = new QPushButton(tr("&Ban")); QPushButton *_unban = new QPushButton(tr("U&nban")); QPushButton *_clpass = new QPushButton(tr("&Clear Password")); QCheckBox *enableSorting = new QCheckBox(tr("&Enable sorting")); mylayout->addWidget(_authority,1,0); mylayout->addWidget(_ban,1,2); mylayout->addWidget(_unban,1,3); mylayout->addWidget(_clpass,1,4); mylayout->addWidget(enableSorting, 1, 5); if (mytable->rowCount() == 0) return; connect(_ban,SIGNAL(clicked()),SLOT(ban())); connect(_unban,SIGNAL(clicked()),SLOT(unban())); connect(_clpass,SIGNAL(clicked()),SLOT(clpass())); connect(enableSorting, SIGNAL(toggled(bool)), SLOT(enableSorting(bool))); }
PlayersWindow::PlayersWindow(QWidget *parent, int expireDays) : QWidget (parent) { setAttribute(Qt::WA_DeleteOnClose, true); resize(726, this->height()); QGridLayout *mylayout = new QGridLayout(this); mytable = new QCompactTable(0,7); mytable->setShowGrid(true); mylayout->addWidget(mytable,0,0,1,6); QMap<int, QString> authgrade; authgrade[0] = "User"; authgrade[1] = "Mod"; authgrade[2] = "Admin"; authgrade[3] = "Owner"; QStringList headers; headers << "Player" << "Authority" << "Banned Status" << "Registered" << "IP" << "Last Appearance" << "Expires In"; mytable->setHorizontalHeaderLabels(headers); QSqlQuery q; q.setForwardOnly(true); q.exec("select count(*) from trainers"); if (q.next()) { mytable->setRowCount(q.value(0).toInt()); } q.exec("select name, auth, banned, hash, ip, laston, ban_expire_time from trainers order by name asc"); int i = 0; while(q.next()) { QTableWidgetItem *witem = new QTableWidgetItem(q.value(0).toString()); mytable->setItem(i, 0, witem); witem = new QTableWidgetItem(authgrade[q.value(1).toInt()]); mytable->setItem(i, 1, witem); QString bannedString = "Banned"; int expiration = q.value(6).toInt() - QDateTime::currentDateTimeUtc().toTime_t(); if(expiration < 0) { if (q.value(6).toInt() != 0) bannedString = "Expires on Login"; } else { if(expiration < 60) { if(expiration == 1) { bannedString.append(QString(" (%1 second)").arg(expiration)); } else { bannedString.append(QString(" (%2 seconds)").arg(expiration)); } } else { if(expiration >= 60) { expiration = expiration / 60; if(expiration == 1) { bannedString.append(QString(" (%1 minute)").arg(expiration)); } else { bannedString.append(QString(" (%2 minutes)").arg(expiration)); } } } } witem = new QTableWidgetItem(q.value(2).toBool() ? bannedString : "Fine"); mytable->setItem(i, 2, witem); witem = new QTableWidgetItem(q.value(3).toString().length() > 0 ? "Yes" : "No"); mytable->setItem(i, 3, witem); witem = new QTableWidgetItem(q.value(4).toString()); mytable->setItem(i, 4, witem); witem = new QTableWidgetItem(q.value(5).toString()); mytable->setItem(i, 5, witem); witem = new QTableWidgetItem(QString::number(expireDays - QDate::fromString(q.value(5).toString(), "yyyy-MM-dd").daysTo(QDate::currentDate())) + " Days"); mytable->setItem(i, 6, witem); i++; } mytable->sortByColumn(0, Qt::AscendingOrder); mytable->setSortingEnabled(true); QPushButton *_authority = new QPushButton(tr("&Authority")); QMenu *m = new QMenu(_authority); m->addAction(tr("User"), this, SLOT(user())); m->addAction(tr("Moderator"), this, SLOT(mod())); m->addAction(tr("Administrator"), this, SLOT(admin())); m->addAction(tr("Owner"), this, SLOT(owner())); _authority->setMenu(m); QPushButton *_ban = new QPushButton(tr("&Ban")); QPushButton *_unban = new QPushButton(tr("U&nban")); QPushButton *_clpass = new QPushButton(tr("&Clear Password")); mylayout->addWidget(_authority,1,0); mylayout->addWidget(_ban,1,2); mylayout->addWidget(_unban,1,3); mylayout->addWidget(_clpass,1,4); if (mytable->rowCount() == 0) return; connect(_ban,SIGNAL(clicked()),SLOT(ban())); connect(_unban,SIGNAL(clicked()),SLOT(unban())); connect(_clpass,SIGNAL(clicked()),SLOT(clpass())); }
void CKickBan::executeCommand(QString command, QStringList params, QString addr, QString sender) { CUsers* users = (CUsers*) core -> getPlugin("users"); if(command == "vote") { if(params.length() < 1) { core -> sendMsg(addr, "Za mało parametrów!"); return; } if(params[0] == "pass_min") { if(params.length() < 2) { core -> sendMsg(addr, "Za mało parametrów!"); return; } settings -> SetDouble("vote_pass_min", params[1].toDouble()); return; } if(params[0] == "timeout") { if(params.length() < 2) { core -> sendMsg(addr, "Za mało parametrów!"); return; } settings -> SetInt("vote_timeout", params[1].toInt()); return; } if(params[0] == "min_votes") { if(params.length() < 2) { core -> sendMsg(addr, "Za mało parametrów!"); return; } settings -> SetInt("vote_min_votes", params[1].toInt()); return; } return; } if(state == Waiting) { if(command == "kick") { if(params.length() < 1) { core -> sendMsg(addr, "Za mało parametrów!"); return; } if(params[0] == core -> getNick()) { core -> sendMsg(addr, "Nie będę kopał samego siebie ;)"); return; } if(users -> Find(params[0]) == -1) { core -> sendMsg(addr, "Nie ma takiego użytkownika!"); return; } core -> kickUser(params[0], (params.length() > 1) ? params[1] : ""); } else if(command == "ban") { if(params.length() < 1) { core -> sendMsg(addr, "Za mało parametrów!"); return; } if(params[0] == core -> getNick()) { core -> sendMsg(addr, "Nie będę banował samego siebie ;)"); return; } int id = users -> Find(params[0]); if(id == -1) { core -> sendMsg(addr, "Nie ma takiego użytkownika."); return; } User u = (*users)[id]; ban(u.nick, "*!" + u.mask); core -> kickUser(params[0], (params.length() > 1) ? params[1] : ""); } else if(command == "unban") { if(params.length() < 1) { core -> sendMsg(addr, "Za mało parametrów!"); return; } if(! bans.contains(params[0])) { core -> sendMsg(addr, "Nie ma bana o takiej nazwie!"); return; } unban(params[0]); } else if(command == "banlist") { list_reply = addr; core -> channelMode("b", ""); } /**** Votes ****/ else if(command == "votekick") { if(params.length() < 1) { core -> sendMsg(addr, "Za mało parametrów!"); return; } if(params[0] == core -> getNick()) { core -> sendMsg(addr, "Nie będę kopał samego siebie ;)"); return; } if(users -> Find(params[0]) == -1) { core -> sendMsg(addr, "Nie ma takiego użytkownika!"); return; } voteTarget = params[0]; int timeout = settings -> GetInt("vote_timeout"); state = Voting; voteType = Kick; vote = new Vote; core -> sendMsgChannel("Głosowanie nad kickiem dla " + params[0] + "."); core -> sendMsgChannel("W ciągu następnych " + QString::number(timeout/1000) + " sekund wpisz \"!yes\" (głos za), \"!no\" (głos przeciw) albo \"!whatever\" (wstrzymanie się)."); QTimer::singleShot(timeout, this, SLOT(endVote())); } else if(command == "voteban") { if(params.length() < 1) { core -> sendMsg(addr, "Za mało parametrów!"); return; } if(params[0] == core -> getNick()) { core -> sendMsg(addr, "Nie będę banował samego siebie ;)"); return; } int id = users -> Find(params[0]); if(id == -1) { core -> sendMsg(addr, "Nie ma takiego użytkownika!"); return; } voteTarget = params[0]; voteMask = "*!*@" + (*users)[id].mask; int timeout = settings -> GetInt("vote_timeout"); state = Voting; voteType = Ban; vote = new Vote; core -> sendMsgChannel("Głosowanie nad banem dla " + params[0] + "."); core -> sendMsgChannel("W ciągu następnych " + QString::number(timeout/1000) + " sekund wpisz \"!yes\" (głos za), \"!no\" (głos przeciw) albo \"!whatever\" (wstrzymanie się)."); QTimer::singleShot(timeout, this, SLOT(endVote())); } else if(command == "voteunban") { if(params.length() < 1) { core -> sendMsg(addr, "Za mało parametrów!"); return; } if(! bans.contains(params[0])) { core -> sendMsg(addr, "Nie ma takiego bana!"); return; } voteTarget = params[0]; int timeout = settings -> GetInt("vote_timeout"); state = Voting; voteType = Unban; vote = new Vote; core -> sendMsgChannel("Głosowanie nad zdjęciem bana dla " + params[0] + "."); core -> sendMsgChannel("W ciągu następnych " + QString::number(timeout/1000) + " sekund wpisz \"!yes\" (głos za), \"!no\" (głos przeciw) albo \"!whatever\" (wstrzymanie się)."); QTimer::singleShot(timeout, this, SLOT(endVote())); } else { core -> sendMsg(addr, "Ta komenda jest teraz nieaktywna."); return; } } else if(state == Voting) { if(command == "yes") { if(! vote -> voteFor(sender)) { core -> sendMsg(addr, "Już głosowałeś/aś w tym głosowaniu!"); return; } if(vote -> numVotes() == users -> presentUsers()) { endVote(); return; } } else if(command == "no") { if(! vote -> voteAgainst(sender)) { core -> sendMsg(addr, "Już głosowałeś/aś w tym głosowaniu!"); return; } if(vote -> numVotes() == users -> presentUsers()) { endVote(); return; } } else if(command == "whatever") { if(! vote -> voteNone(sender)) { core -> sendMsg(addr, "Już głosowałeś/aś w tym głosowaniu!"); return; } if(vote -> numVotes() == users -> presentUsers()) { endVote(); return; } } else { core -> sendMsg(addr, "Ta komenda jest teraz nieaktywna."); return; } } }