コード例 #1
0
ファイル: CKickBan.cpp プロジェクト: fizyk20/ircbot
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;
}
コード例 #2
0
ファイル: areal.cpp プロジェクト: finalist736/gamechatserver
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());
            }
        }
    }
}
コード例 #3
0
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)));
}
コード例 #4
0
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()));
}
コード例 #5
0
ファイル: CKickBan.cpp プロジェクト: fizyk20/ircbot
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;
		}
	}
}