dev-moderation #66

Merged
lopar merged 29 commits from dev-moderation into dev 2023-12-09 14:14:38 +00:00
Showing only changes of commit eb279a8eff - Show all commits

View File

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