game/_incl_data/class/Moderation/Moderation.php

153 lines
5.0 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace Moderation;
use Core\Db;
use DateTime;
use Delo;
// todo Заменить уродский костыль с тюремным сундуком. Возможен конфликт с автоудалением предметов!
// todo Понять как мониторить переводы.
class Moderation
{
private const JAIL_ROOM = 274;
private const CENTRAL_SQUARE_ROOM = 9;
private const JAIL_STORAGE = 1357908642; /* Ух, костыль! */
private const NOT_SET = 'Не указано.';
private const EXPIRATION_DATETIME_FORMAT = 'd M Y H:i';
private int $target;
public function __construct(int $userid)
{
$this->target = $userid;
}
/**
* Молчание
* @param DateTime $expiration срок истечения.
* @param string $reason причина применения.
*/
public function silence(DateTime $expiration, string $reason = self::NOT_SET): void
{
Db::sql('update users set molch1 = ? where id = ?', [$expiration->getTimestamp(), $this->target]);
Delo::add(
10,
'moderation.silence',
$this->target,
'Молчанка в чате до ' . $expiration->format(self::EXPIRATION_DATETIME_FORMAT) . '. ' . $reason,
);
}
/**
* Снятие молчания
*/
public function unsilence(): void
{
if (Db::getValue('select count(molch1) from users where id = ? and molch1 != 0', [$this->target]) === 0) {
return;
}
Db::sql('update users set molch1 = default where id = ?', [$this->target]);
Delo::add(
10,
'moderation.unsilence',
$this->target,
'Отмена молчанки.',
);
}
/**
* Обезличивание
* @param DateTime $expiration срок истечения.
* @param string $reason причина применения.
*/
public function depersonalize(DateTime $expiration, string $reason = self::NOT_SET): void
{
Db::sql('update users set info_delete = ? where id = ?', [$expiration->getTimestamp(), $this->target]);
Delo::add(
10,
'moderation.depersonalize',
$this->target,
'Скрытие анкеты до ' . $expiration->format(self::EXPIRATION_DATETIME_FORMAT) . '. ' . $reason,
);
}
/**
* Снятие обезличивания
*/
public function undepersonalize(): void
{
if (Db::getValue('select count(info_delete) from users where id = ? and info_delete != 0', [$this->target]) === 0) {
return;
}
Db::sql('update users set info_delete = default where id = ?', [$this->target]);
Delo::add(
10,
'moderation.undepersonalize',
$this->target,
'Раскрытие анкеты.',
);
}
/**
* Тюрьма
* @param DateTime $expiration срок истечения.
* @param string $reason причина применения.
* @todo Корректно выбрасывать игрока из подземелья.
*/
public function prison(DateTime $expiration, string $reason = self::NOT_SET): void
{
Db::sql('update users set jail = ?, room = ? where id = ?', [$expiration->getTimestamp(), self::JAIL_ROOM, $this->target,]);
Db::sql('update items_users set `delete` = ? where `delete` = 0 and uid = ?', [self::JAIL_STORAGE, $this->target,]);
Delo::add(
10,
'moderation.prison',
$this->target,
'Тюрьма до ' . $expiration->format(self::EXPIRATION_DATETIME_FORMAT) . '. ' . $reason,
);
}
/**
* Снятие тюрьмы
*/
public function unprison(): void
{
Db::sql('update users set jail = default, room = ? where id = ?', [self::CENTRAL_SQUARE_ROOM, $this->target,]);
Db::sql('update items_users set `delete` = default where `delete` = ? and uid = ?', [self::JAIL_STORAGE, $this->target,]);
Delo::add(
10,
'moderation.unprison',
$this->target,
'Выпуск из тюрьмы.',
);
}
/**
* Блокировка
* @param string $reason причина применения.
*/
public function ban(string $reason = self::NOT_SET): void
{
Db::sql('update users set banned = unix_timestamp() where id = ?', [$this->target]);
Delo::add(
10,
'moderation.ban',
$this->target,
'Блокировка. ' . $reason,
);
}
/**
* Снятие блокировки
*/
public function unban(): void
{
Db::sql('update users set banned = default where id = ?', [$this->target]);
Delo::add(
10,
'moderation.unban',
$this->target,
'Снятие блокировки.',
);
}
}