- Issue created by @haver
- 🇷🇺Russia APolitsin
Для сохранения состояния мы внутри используем сервис redis.
А на случай когда этого сервиса нет, там была реализован функционал
хранения состояния в сущности чата, но толком это никто не тестировал.Вот где идёт попытка сохранения состояния:
https://git.drupalcode.org/project/telega/-/blob/8.x-1.x/src/Utility/Red...Так оно подключается в юзер-команду:
https://git.drupalcode.org/project/telega/-/blob/8.x-1.x/src/Utility/Use...Сейчас в модуль добавляется большой кусок функционала по интеграции с chatwoot, поэтому текущий момент быстро поправить не смогу. До майских планирую успеть выкатить новую версию, там и этот момент смогу пофиксить.
---
стартегически если планируешь работать с состоянием лучше работать с редисом, может настройки сразу добавим в модуль.services: redis: class: Drupal\redis\Service\RedisSrvice
namespace Drupal\redis\Service; /** * GuzzleSrvice service. */ class RedisSrvice { /** * The config factory. * * @var \Redis */ protected $redis; /** * Constructs a Guzzle. */ public function __construct() { $redis = new \Redis(); $redis->connect('тутадрес сервера', 6379); try { $redis->auth('пароль'); if ($redis->ping()) { // dsm("PONG: " . $redis->get("foo"));. } // dsm($redis->keys('*'));. } catch (\RedisException $e) { } $this->redis = $redis; } /** * Get. */ public function get(string $topic) { $topic = $this->modifyTopic($topic); return $this->redis->get($topic); } /** * Get. */ public function multiGet(array $data) { $redis = $this->redis->multi(); foreach ($data as $key => $val) { $topic = $this->modifyTopic($val['topic']); $redis->get($topic); } $result = $redis->exec(); $i = 0; foreach ($data as $key => $value) { $data[$key]['state'] = $result[$i++]; } return $data; } /** * Set. */ public function set(string $topic, string $message) { $topic = $this->modifyTopic($topic); return $this->redis->set($topic, $message); } /** * Set. */ private function modifyTopic(string $topic) : string { return str_replace("/", ":", $topic); }
- 🇦🇿Azerbaijan haver
Там для хранения состояния, если отсутствует redis, используется как альтернатива кеш drual:
if (\Drupal::hasService('redis')) { return \Drupal::service('redis')->set($key, $val); } else { \Drupal::cache()->set("telega::$key", $val); }
Вопрос кладет ли он состояние в кеш и достает оттуда?
- @haver opened merge request.
- 🇦🇿Azerbaijan haver
А вижу что на dev версии эта проблему уже пофиксили, там сделан рефакторинг кода. На 8.x-1.24 метод getVal() возвращает NULL по дефолту, соответственно информация о состоянии ни на редисе ни на друпал кеше не возвращается.
Соответственно на деве это поправили и диалог в боте продолжается на следующие стадии как нужно.
Спасибо. - Status changed to Fixed
11 months ago 12:58pm 19 January 2024 Automatically closed - issue fixed for 2 weeks with no activity.