game/_incl_data/class/Moderation/ModFactory.php

148 lines
6.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 Chat;
use ChatMessage;
use Core\Db;
use DateTime;
use User;
class ModFactory
{
private const ERROR_WRONG_DURATION = 'Неверно указан срок наказания';
public readonly string $status;
private DateTime $time;
private ChatMessage $msg;
private Moderation $moderation;
private Chat $chat;
private array $targetUser;
public function __construct(
private readonly string $targetLogin,
private readonly string $reason,
int $moderatorsRoom // Комната где сидит модератор.
)
{
$this->targetUser = User::getInfo($this->targetLogin);
if (empty($this->targetUser)) {
$this->status = 'Персонаж не найден!';
return;
}
$this->chat = new Chat();
$this->msg = new ChatMessage();
$this->msg->setType(6);
$this->msg->setTypeTime(1);
$this->msg->setRoom($moderatorsRoom);
$this->time = new DateTime();
$this->moderation = new Moderation($this->targetUser['id']);
}
public function silence(int $minutes): void
{
if ($minutes < 1) {
$this->status = self::ERROR_WRONG_DURATION;
return;
}
$this->time->modify("+ $minutes minute");
$this->moderation->silence($this->time, $this->reason);
$this->status = "Персонажу $this->targetLogin запрещено общаться в чате до {$this->time->format(Moderation::EXPIRATION_DATETIME_FORMAT)}.";
$this->msg->setText("[img[items/silence.gif]] $this->status");
$this->chat->sendMsg($this->msg);
}
public function unsilence(): void
{
if ($this->targetUser['molch1'] < $this->time->getTimestamp()) {
$this->status = 'Персонаж не молчит!';
return;
}
$this->moderation->unsilence();
$this->status = "С персонажа $this->targetLogin снят запрет на общение в чате.";
$this->msg->setText("[img[items/pal_button3.gif]] $this->status");
$this->chat->sendMsg($this->msg);
}
public function prison(int $days): void
{
if ($days < 1) {
$this->status = self::ERROR_WRONG_DURATION;
return;
}
$this->time->modify("+ $days day");
$this->moderation->prison($this->time, $this->reason);
Db::sql('delete from dungeon_zv where uid = ?', [$this->targetUser['id']]); // Удаляем заявки в пещеры.
$this->status = "Персонаж $this->targetLogin был отправлен в тюрьму до {$this->time->format(Moderation::EXPIRATION_DATETIME_FORMAT)}.";
$this->msg->setText("[img[items/jail.gif]] $this->status");
$this->chat->sendMsg($this->msg);
}
public function unprison(): void
{
$this->moderation->unprison();
$this->status = "Персонаж $this->targetLogin был выпущен из тюрьмы.";
$this->msg->setText("[img[items/jail_off.gif]] $this->status");
$this->chat->sendMsg($this->msg);
}
public function depersonalize(int $days): void
{
if ($days < 1) {
$this->status = self::ERROR_WRONG_DURATION;
return;
}
if ($this->targetUser['info_delete'] === 1 || $this->targetUser['info_delete'] >= $this->time->getTimestamp()) {
$this->status = 'Персонаж уже под подозрением.';
return;
}
$this->time->modify("+ $days day");
$this->moderation->depersonalize($this->time, $this->reason);
$this->status = "Персонаж $this->targetLogin под подозрением до {$this->time->format(Moderation::EXPIRATION_DATETIME_FORMAT)}";
$this->msg->setText("[img[items/cui.gif]] $this->status");
$this->chat->sendMsg($this->msg);
}
public function undepersonalize(): void
{
if ($this->targetUser['info_delete'] <= $this->time->getTimestamp()) {
$this->status = 'Персонаж не под подозрением.';
return;
}
$this->moderation->undepersonalize();
$this->status = "Персонаж $this->targetLogin больше не под подозрением";
$this->msg->setText("[img[items/uncui.gif]] $this->status");
$this->chat->sendMsg($this->msg);
}
public function ban(): void
{
$this->moderation->ban($this->reason);
Db::sql('delete from chat where login = ?', [$this->targetLogin]);
Db::sql('insert into ban_email (email, uid, nick_name) values (?,?,?)', [$this->targetUser['mail'], $this->targetUser['id'], $this->targetLogin]);
Db::sql('delete from zayvki where creator = ?', [$this->targetUser['id']]); // Удаляем заявки на бой.
Db::sql('delete from dungeon_zv where uid = ?', [$this->targetUser['id']]); // Удаляем заявки в пещеры.
if (!empty($this->targetUser['battle'])) {
Db::sql(
'update users left join stats on users.id = stats.id set battle = default, regHP = unix_timestamp(), team = 0, battle_yron = 0, battle_exp = 0 where users.id = ?',
[$this->targetUser['id']]
);
}
$this->status = "Персонаж $this->targetLogin заблокирован";
$this->msg->setText("[img[items/pal_button6.gif]] $this->status");
$this->chat->sendMsg($this->msg);
}
public function unban(): void
{
if (empty($this->targetUser['banned'])) {
$this->status = 'Персонаж не в блоке.';
return;
}
$this->moderation->unban();
Db::sql('delete from ban_email where email = ?', [$this->targetUser['mail']]);
$this->status = "Персонаж $this->targetLogin разблокирован";
$this->msg->setText("[img[items/pal_button7.gif]] $this->status");
$this->chat->sendMsg($this->msg);
}
}