Я тут оставлю, возможно кому понадобится решение сохранение последнего телеграмного сообщения в свойство объекта.
Зачем это нужно? Я эту информацию вывожу в сцене бегущей стройкой и + Алиса проговаривает при движеннии в нужной комнате. Это как важное "объявление".
Код: Выделить всё
//коды смайлов в кодировке utf-8
//$off = hex2bin('F09F8C91');
//$on = hex2bin('F09F8C95');
$users[0] = 'telegram1'; //
$users[1] = 'telegram2'; //
$users[2] = 'telegram4'; //
$users[3] = 'telegram3'; //
$title = Null;
$pog = hex2bin('E29B85');
$sta = hex2bin('F09F92AC');
$to_text = 'Display.telegram_text'; // Здесь сохраняют заголовки.
$to_title = 'Display.telegram_title'; // Здесь сохраняют объявления.
$message = 'message'; // введенный текст.
//$flag = 23456789; // Если $flag = 0 то сохраняем в "Заголовок" а если $flag = 1 то сохраняем в текст
//if(gg("security")){$st1=$on;}
//if(gg("Econom")){$st2=$on;}
print_r($callback);
//Второе меню
$option1 = array(array($title."Заголовок", $pog."Погода", $sta."Текст"),array("Назад"));
//Основное меню
$option2 = array(array($title."Сохранить"),array("меню"));
//Нажали на кнопку "Заголовок"
$pos = strripos($text , "Заголовок");
if ($pos > -1) {
setGlobal('Display.flag', 1);
$this->sendMessageToUser($chat_id,"Введите только заголовок объявления:",$option2);
$skip = true;
}
//Нажали на кнопку "Текст"
$pos = strripos($text , "Текст");
if ($pos > -1) {
setGlobal('Display.flag', 2);
$this->sendMessageToUser($chat_id,"Введите текст объявления:",$option2);
$skip = true;
}
//Нажали на кнопку погода
$pos = strripos($text , "Погода");
if ($pos > -1) {
$weather= "Сейчас".hex2bin('F09F8CA1').gg('ow_fact.temperature')."°C,".gg('ow_fact.weather_type').",".hex2bin('F09F92A8').gg('ow_fact.wind_direction_my')." ".gg('ow_fact.wind_speed')."км/ч, ".hex2bin('F09F92A7').gg('ow_fact.humidity')."%, ".hex2bin('F09F92AA').round(gg('ow_fact.pressure_mmhg'),0);
$this->sendMessageToUser($chat_id, $weather, $option1);
$skip = true;
}
//Действие на кнопку "сохранить"
$pos = strripos($text , "Сохранить");
if ($pos > -1) {
$this->sendMessageToUser($chat_id, "Введенные Вами данные сохранены!", $option1);
$skip = true;
//setGlobal('Display.telegram_title', $flag); // Для дебага
//-------------------------Ниже код сохраняет пользовательский текст в свойства объекта ----------------//
$conn = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if ($conn === false) {
die("Ошибка: " . mysqli_connect_error());
}
//
$sqltxt = '';
$count_arr = count($users);
$count_arr = $count_arr - 1;
foreach($users as $v){
$sqltxt .= "`source` = '".$v."'";
if($count_arr > '0'){
$sqltxt .= ' OR ';
}
$count_arr--;
}
//echo "Подключение успешно установлено";
$sql = "SELECT * FROM `shouts` WHERE ".$sqltxt." ORDER BY `shouts`.`ADDED` DESC";
$ress = $conn->query($sql);
$rows = $ress->fetch_array();
// последнее сообщение из телеграмма
//echo $rows[3];
$flag = getGlobal('Display.flag');
if($flag == 1){
setGlobal('Display.telegram_title', trim($rows[3]));
setGlobal('Display.flag', 0);
}
if($flag == 2){
setGlobal('Display.telegram_text', trim($rows[3]));
setGlobal('Display.flag', 0);
}
//echo "<pre>"; print_r($rows); echo "</pre>";
mysqli_close($conn);
/////////////////////////////////
}
//показать меню
//echo $text;
$pos = strripos($text , "меню");
if ($pos > -1) {
$this->sendMessageToUser($chat_id,"Выберите действие:",$option1);
$skip = true;
}
Для того, что бы добавить пользователя в массив там где
Код: Выделить всё
$users[0] = 'telegram1'; //
$users[1] = 'telegram2'; //
$users[2] = 'telegram4'; //
нужно сказать пользователю ввести кодовое слово в телеграмме и на страничке phpmyadmin смотри приложенные скрины, что бы узнать кокой у него номер "telegram1" или "telegram2". Что бы привязать код к своим свойствам делайте это в 80-й строке и в 84.
В 78-й строке указанно свойство которое будет работать как флаг.
Вопрос: Как реализовать нажатие кнопки "Обновить" в свойствах объекта смотри 3-й скрин. Может можно написать метод который будет срабатывать при изменении свойства объекта или может скрипт?
Зачем это нужно?
Часто когда сообщение больщое то, в сцене оно не отображается! И нужно нажать на кнопку обновить, что бы текст новый появился в сцене! Я думаю это как-то связанно с обновлением кеша.
Logrus писал(а): ↑Ср июн 09, 2021 8:04 pm
...
описывать все это никто не будет, решать вашу задачу аналогично
...
Я помню и понимаю! Но, может кто даст направление куда "копать"?