2022-08-25 11:23:36 +00:00
< ? php
2022-12-19 20:16:24 +00:00
/** Types
* 1. all
* 2. to
* 5. system to ?
* 6. system to
* 11. ? ? ?
*/
2022-12-30 19:03:37 +00:00
use Core\Db ;
2022-12-19 20:16:24 +00:00
2022-08-25 11:23:36 +00:00
class Chat
{
2023-10-16 10:52:58 +00:00
private array $smilesWorld = [
'laugh' => [ 0 => 'смеется' , 1 => 'посмеялся над [*%l*]' ],
'fingal' => [ 0 => 'трет фингал' , 1 => 'щупает фингал у [*%l*]' ],
'eek' => [ 0 => 'ошарашен' , 1 => 'ошарашен действиями [*%l*]' ],
'smoke' => [ 0 => 'закуривает' , 1 => 'предлагает [*%l*] пойти покурить' ],
'hi' => [ 0 => 'приветствует всех вокруг' , 1 => 'приветствует [*%l*]' ],
'bye' => [ 0 => 'прощается с о всеми и уходит' , 1 => 'прощается с [*%l*]' ],
'king' => [ 0 => 'коронует себя :-)' , 1 => 'объявляет [*%l*] своим королем!' ],
'king2' => [ 0 => 'коронует себя :-)' , 1 => 'объявляет [*%l*] своей королевой!' ],
'boks2' => [ 0 => 'вызывает всех на поединок' , 1 => 'предлагает [*%l*] дружеский матч' ],
'boks' => [ 0 => 'обещает побить любого, кто примет вызов!' , 1 => 'намекает [*%l*] на поединок' ],
'gent' => [ 0 => 'предлагает считать себя благородным сэром' , 1 => 'считает [*%l*] джельтельменом' ],
'lady' => [ 0 => 'предлагает считать себя благородной леди' , 1 => 'считает, что [*%l*] настоящая Леди' ],
'tongue' => [ 0 => 'показывает окружающим язык' , 1 => 'показывает язык [*%l*]' ],
'smil' => [ 0 => 'болтает без умолку' , 1 => 'считает, что [*%l*] говорит откровенную ерунду!' ],
'ponder' => [ 0 => 'кое-что усиленно обдумывает' , 1 => 'обещает обмозговать предложение [*%l*]' ],
'bow' => [ 0 => 'сохраняя достоинство, кивает окружающим' , 1 => 'сохраняя достоинство кивает [*%l*]' ],
'angel' => [ 0 => 'считает себя Ангелом' , 1 => 'считает [*%l*] своим Ангелом' ],
'angel2' => [ 0 => 'грезит о б Ангелах' , 1 => 'думает что [*%l*] Ангел' ],
'hello' => [ 0 => 'желает здравствовать окружающим' , 1 => 'желает здравствовать [*%l*]' ],
'dont' => [ 0 => 'рекомендует окружающим не делать этого' , 1 => 'рекомендует [*%l*] не делать этого' ],
'idea' => [ 0 => 'озарен свежей идеей!' , 1 => 'предлагает [*%l*] обсудить пару идей' ],
'mol' => [ 0 => 'преклоняется перед окружающими' , 1 => 'преклоняется перед [*%l*]' ],
'super' => [ 0 => 'считает, что мир хорош, все дамы - Леди, а Солнце - шар дающий свет!' , 1 => 'фанатеет от [*%l*]' ],
'beer' => [ 0 => 'вспоминает про припрятаный в заначке эликсир...' , 1 => 'готов поделиться с [*%l*] припрятанным эликсиром!' ],
'drink' => [ 0 => 'считает, что пора пить различные эликсиры' , 1 => 'предлагает [*%l*] пойти пропустить по стаканчику эликсира' ],
'baby' => [ 0 => 'изображает малыша' , 1 => ' считает, что [*%l*] еще мал и неопытен для обоснованной критики' ],
'tongue2' => [ 0 => ' показывает всяким врединам язык' , 1 => 'показывает [*%l*] язык, проявляя недовольство' ],
'sword' => [ 0 => 'готов сразиться в честном поединке' , 1 => 'вызывает [*%l*] на честный поединок!' ],
'agree' => [ 0 => 'пожимает руку собеседникам' , 1 => 'пожимает руку [*%l*]' ],
'loveya' => [ 0 => 'преисполнен чувства любви' , 1 => 'преисполнен чувства любви к [*%l*]' ],
'kiss' => [ 0 => 'целует всех' , 1 => 'целует [*%l*]' ],
'kiss2' => [ 0 => 'хочет нежно поцеловать кого-то...' , 1 => 'нежно целует [*%l*]' ],
'kiss3' => [ 0 => 'кое-кого целует...' , 1 => 'нежно целует [*%l*]' ],
'kiss4' => [ 0 => 'кое-кого целует...' , 1 => 'хочет уединиться с [*%l*] и целоваться...' ],
'rose' => [ 0 => 'хочет кому-то подарить розу, но стесняется...' , 1 => 'дарит [*%l*] ароматную розу...' ],
'love' => [ 0 => 'думает только о любви...' , 1 => 'думает, что [loginfrom] + [*%l*]= любовь!' ],
'love2' => [ 0 => 'мечтает о свадьбе...' , 1 => 'мечтает о свадьбе с [*%l*]' ],
'confused' => [ 0 => 'в недоумении...' , 1 => 'недоумевает от [*%l*]' ],
'yes' => [ 0 => 'кивает в знак согласия' , 1 => 'кивает [*%l*] в знак согласия' ],
'no' => [ 0 => 'мотает головой в знак протеста' , 1 => 'мотает головой [*%l*] в знак протеста' ],
'shuffle' => [ 0 => 'в смущении от таких обстоятельств' , 1 => 'в смущении от [*%l*]' ],
'nono' => [ 0 => 'выражает категорическое несогласие!' , 1 => 'выражает категорическое несогласение с [*%l*]' ],
'maniac' => [ 0 => 'знает точно наперед - сегодня кто-нибудь умрет...' , 1 => 'считает, что [*%l*] пора бы уже стать жертвой маньяка...' ],
'privet' => [ 0 => 'почтительно приветствует окружающих' , 1 => 'почтительно приветствует [*%l*]' ],
'ok' => [ 0 => 'считает, что это замечательная идея' , 1 => 'считает, что [*%l*] движется в правильном направлении' ],
'ninja' => [ 0 => 'угрожает окружающим тайным мастерством!' , 1 => 'угрожает [*%l*] мастерством древних' ],
'pif' => [ 0 => 'ищет подходящую мишень' , 1 => 'думает, что сложно промахнуться по [*%l*]' ],
'smash' => [ 0 => 'собирается крушить и ломать' , 1 => 'хочет сломать пару-тройку костей у [*%l*]' ],
'alien' => [ 0 => 'считает, что мир захватили мутанты!' , 1 => ' считает, что [*%l*] еще тот мутант!' ],
'pirate' => [ 0 => 'подумывает, кого бы ограбить!...' , 1 => 'считает, что лучшей жертвы чем [*%l*], не найти!' ],
'gun' => [ 0 => 'хочет повысить кое-кому уровень железа в организме... :gun:' , 1 => 'считает, что у [*%l*] маловато железа в организме! :gun:' ],
'trup' => [ 0 => 'падает замертво' , 1 => 'считает, что [*%l*], живет слишком долго, и пора бы это исправить!' ],
'mdr' => [ 0 => 'считает, что у него есть отличный способ решения разногласий... :mdr:' , 1 => 'предлагает [*%l*] культурно отдохнуть :mdr:' ],
'sneeze' => [ 0 => 'громко чихает' , 1 => 'чихает на [*%l*], обрызгивая е г о слюнями с ног до головы!' ],
'mad' => [ 0 => 'просто в бешенстве!!!' , 1 => 'в бешенстве от [*%l*]!!!' ],
'friday' => [ 0 => 'культурно отдыхает...' , 1 => 'предлагает [*%l*] культурно отдохнуть' ],
'cry' => [ 0 => 'безудержно рыдает' , 1 => 'рыдает на плече у [*%l*]' ],
'grust' => [ 0 => 'грустит...' , 1 => 'грустит о [*%l*]' ],
'rupor' => [ 0 => 'пытается докричаться до окружающих' , 1 => 'пытается докричаться до [*%l*]' ],
'fie' => [ 0 => 'умоляет: Н Е Т , только не ЭТО!!!' , 1 => 'умоляет [*%l*] о пощаде!' ],
'nnn' => [ 0 => 'ничего не видит, не слышит, и никому не скажет...' , 1 => 'ничего не видел, не слышал и не помнит о [*%l*]' ],
'row' => [ 0 => 'находится в бешенстве и ищет с кем бы пообщаться...' , 1 => 'собирается выяснить отношения с [*%l*]' ],
'red' => [ 0 => 'смущаясь краснеет...' , 1 => 'краснеет от [*%l*]' ],
'lick' => [ 0 => 'облизнулся, в предвкушении' , 1 => 'облизывается при виде [*%l*]' ],
'help' => [ 0 => 'нуждается в срочной помощи!' , 1 => 'просит помощи у [*%l*]' ],
'wink' => [ 0 => 'подмигивает окружающим' , 1 => 'подмигивает [*%l*]' ],
'jeer' => [ 0 => 'посмеивается над ситуацией...' , 1 => 'посмеивается над [*%l*]' ],
'tease' => [ 0 => 'дразнится' , 1 => 'дразнит [*%l*]' ],
'nunu' => [ 0 => 'недоволен окружающими...' , 1 => 'недоволен [*%l*]' ],
'inv' => [ 0 => 'хочет найти свои зубы...' , 1 => 'жалуется [*%l*] на трудности жизни инвалида...' ],
'duel' => [ 0 => 'собирается проткнуть кое-кого...' , 1 => 'вызывает [*%l*] на дуэль!' ],
'susel' => [ 0 => 'Напевая: "эээххх ухнеееемм, да ещеее ууухнеем.." высматривает в толпе подходящий пондер...' , 1 => 'предлагает [*%l*] отхватить прямо по пондеру!' ],
'nun' => [ 0 => 'угрожает окружающим палочками для риса' , 1 => 'показывает [*%l*] как надо пользоваться палочками для риса' ],
'kruger' => [ 0 => 'ненавязчиво объясняет окружающим кого тут надо бояться :kruger:' , 1 => 'демонстрирует [*%l*] нестриженные когти' ],
'flowers' => [ 0 => 'учится выхватывать букет Ромашек-21 из-за спины одним движением' , 1 => 'целует [*%l*] и дарит букет ромашек' ],
'horse' => [ 0 => 'патрулирует границы Бойцовского Клуба' , 1 => 'предлагает [*%l*] порубать всех врагов в капусту! :horse:' ],
'hug' => [ 0 => 'готов обнять всех в комнате!' , 1 => 'крепко обнимает [*%l*]' ],
'str' => [ 0 => 'в ужасе покрывается ледяным потом!' , 1 => 'в ужасе прячется от [*%l*]' ],
'alch' => [ 0 => 'напоминает окружающим о вечных ценностях :alch:' , 1 => 'предлагает [*%l*] приобщиться к вечным ценностям :alch:' ],
'pal' => [ 0 => ' напоминает, что из под робы выпирает крест, а не что-то там! :-)' , 1 => 'требует от [*%l*] предъявить документы в развернутом виде!' ],
'mag' => [ 0 => 'читает заклинания. Вслух. По слогам.' , 1 => 'произносит страшное колдунство на [*%l*]' ],
'sniper' => [ 0 => 'изображает из себя Вильгельма Теля' , 1 => 'предлагает [*%l*] поиграть в Вильгельма Теля' ],
'fuck' => [ 0 => 'повторяет позы камасутры' , 1 => 'предлагает [*%l*] повторить позы камасутры вместе' ],
'rotate' => [ 0 => 'катается от смеха по полу' , 1 => 'катается по полу от смеха над [*%l*]' ],
];
2022-08-25 11:23:36 +00:00
2023-10-16 13:12:16 +00:00
public static function getLastMessageId () : int
{
return ( int ) Db :: getValue ( 'select max(id) from chat' );
}
public static function setCurrentTimeById ( int $messageId ) : void
{
Db :: sql ( 'update chat set time = unix_timestamp() where id = ?)' , [ $messageId ]);
}
public static function setCurrentTimeAndIdById ( int $messageId , int $newMessageId ) : void
{
Db :: sql ( 'update chat set time = unix_timestamp(), id = ? where id = ?' , [ $newMessageId , $messageId ]);
}
2023-04-01 11:47:32 +00:00
public function expworld ( $txt , $vl ) : string
2022-08-25 11:23:36 +00:00
{
$words = explode ( ' ' , $txt );
$i = - 1 ;
while ( $i < count ( $words )) {
$i ++ ;
if ( isset ( $words [ $i ]) && strlen ( $words [ $i ]) > $vl ) {
$words [ $i ] = substr ( $words [ $i ], 0 , $vl ) . ' ' . substr ( $words [ $i ], $vl );
$i = 0 ;
$txt = implode ( ' ' , $words );
$words = explode ( ' ' , $txt );
}
}
return implode ( ' ' , $words );
}
2023-10-16 10:52:58 +00:00
public function smileText ( $text , $tol , $room )
2022-08-25 11:23:36 +00:00
{
$retxt = '' ;
$j = 0 ;
$txt = str_replace ( '/' , '⁄' , $text ) . ' ' ;
if ( preg_match ( " /⁄(.*?) / " , $txt , $retxt ) && isset ( $this -> smilesWorld [ $retxt [ 1 ]])) {
if ( $tol == '' ) {
$tol = str_replace ( '⁄' . $retxt [ 1 ] . ' ' , '' , $txt );
$tol = trim ( $tol , ' ' );
}
if ( $tol == '' ) {
$txt = $this -> smilesWorld [ $retxt [ 1 ]][ 0 ];
} else {
2023-10-16 10:52:58 +00:00
$mbl = Db :: getValue ( 'select id from users where room = ? and online > unix_timestamp() - 520 and login = ?' , [ $room , $tol ]);
if ( $mbl ) {
2023-04-01 11:47:32 +00:00
$txt = '' . $this -> smilesWorld [ $retxt [ 1 ]][ 1 ];
2022-08-25 11:23:36 +00:00
$txt = str_replace ( '[*%l*]' , '[login:' . $tol . ']' , $txt );
} else {
$txt = 'USER IS FALSE' ;
}
}
$j = 1 ;
}
if ( $j == 1 ) {
$text = $txt ;
} else {
$text = false ;
}
return $text ;
}
2023-10-16 10:52:58 +00:00
public function sendsys ( $text , $to = '' , $color = '#933' ) : void
2022-12-19 20:16:24 +00:00
{
if ( ! $text ) {
return ;
}
Db :: sql ( 'insert into chat (new, text, time, type, color, `to`) values (1,?,unix_timestamp(),6,?,?)' , [
2023-10-16 10:52:58 +00:00
trim ( $text ), $color , $to ,
2022-12-19 20:16:24 +00:00
]);
}
2023-10-16 10:52:58 +00:00
public function debug ( $text , $isLegacyErrorMessage = false ) : void
2022-12-19 20:16:24 +00:00
{
2023-01-28 02:24:37 +00:00
if ( $isLegacyErrorMessage ) {
$text = 'core' . date ( '#d.m.Y %H:i:s:' ) . " <b> $text </b> " ;
}
2022-12-19 20:16:24 +00:00
Db :: sql ( 'insert into chat (new, text, time, type, color, `to`, login) values (1,?,unix_timestamp(),3,?,?,?)' , [
2023-10-16 10:52:58 +00:00
trim ( $text ), 'crimson' , 'Merlin' , 'debugger' ,
2022-12-19 20:16:24 +00:00
]);
}
2023-01-28 02:24:37 +00:00
public function sendMsg ( ChatMessage $chatMessage ) : void
2022-08-25 11:23:36 +00:00
{
2023-01-28 02:24:37 +00:00
$q = ' insert into chat (
new ,
sound ,
color ,
city ,
room ,
login ,
`to` ,
text ,
time ,
type ,
spam ,
invis ,
da ,
`delete` ,
molch ,
typeTime ,
dn ,
frv
2023-04-01 11:47:32 +00:00
) values ( ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? ) ' ;
2023-01-28 02:24:37 +00:00
$args = [
2023-02-02 15:39:42 +00:00
1 ,
2023-01-28 02:24:37 +00:00
$chatMessage -> getSound (),
$chatMessage -> getColor (),
$chatMessage -> getCity (),
$chatMessage -> getRoom (),
$chatMessage -> getLogin (),
$chatMessage -> getTo (),
$chatMessage -> getText (),
$chatMessage -> getTime (),
$chatMessage -> getType (),
$chatMessage -> getSpam (),
$chatMessage -> getInvis (),
$chatMessage -> getDa (),
$chatMessage -> getDelete (),
$chatMessage -> getMolch (),
$chatMessage -> getTypeTime (),
$chatMessage -> getDn (),
$chatMessage -> getFireworks (),
];
Db :: sql ( $q , $args );
2022-08-25 11:23:36 +00:00
}
2023-10-16 13:12:16 +00:00
/** Какая - то заумная выборка что отображать в чат .
* @ param int $messageId
* @ param string $login
* @ return array
*/
public function getMessages ( int $messageId , string $login ) : array
{
$query = " select * from chat
where
new = 1 and
( id > ? or spam > 0 or ( time < 0 and time > - unix_timestamp () and ( `to` = '' or `to` = ? ))) and
( time > unix_timestamp () - 360 or time > unix_timestamp () - 120 or ( time = - 1 and ( `to` = ? or type = 8 )) or time < - 1 and time > - unix_timestamp () and ( `to` = ? or type = 8 or `to` = '' ))
order by id " ;
return Db :: getRows ( $query , [ $messageId , $login , $login , $login ]);
}
2022-08-25 11:23:36 +00:00
}