Хранилища
Это специальные хранилища данных. Их основное применение — в плагинах (например, сессии).
Адаптеры
GramIO имеет множество готовых адаптеров, но вы также можете написать свой собственный!
В памяти (In Memory) (
@gramio/storage
)Redis (
@gramio/storage-redis
)
Как написать свой собственный адаптер хранилища
Написать свой адаптер очень просто!
Достаточно вернуть объект с необходимыми методами и использовать методы выбранного вами решения для адаптера (например, ioredis
).
import type { Storage } from "@gramio/storage";
import ThirdPartyStorage, { type ThirdPartyStorageOptions } from "some-library";
export interface MyOwnStorageOptions extends ThirdPartyStorageOptions {
/** добавить новое свойство в параметры */
some?: number;
}
export function myOwnStorage(options: MyOwnStorageOptions = {}): Storage {
const storage = new ThirdPartyStorage(options);
return {
async get(key) {
const data = await storage.get(key);
return data ? JSON.parse(data) : undefined;
},
async has(key) {
return storage.has(key);
},
async set(key, value) {
await storage.set(key, JSON.stringify(value));
},
async delete(key) {
return storage.delete(key);
},
};
}
IMPORTANT
Если вы хотите опубликовать свой адаптер, мы рекомендуем следовать соглашению и назвать его начиная с gramio-storage
и добавить ключевые слова gramio
+ gramio-storage
в ваш package.json
Как использовать адаптеры хранилища в своем плагине
Работать с адаптерами хранилища в вашем плагине также очень просто!
Всё, что нам нужно, уже есть в @gramio/storage
.
import { Plugin } from "gramio";
import { type Storage, inMemoryStorage } from "@gramio/storage";
export interface MyOwnPluginOptions {
storage?: Storage;
}
export function myOwnPlugin(options: MyOwnPluginOptions = {}) {
// используем хранилище в памяти по умолчанию
const storage = options.storage ?? inMemoryStorage();
return new Plugin("gramio-example");
}
IMPORTANT
Вы можете создать шаблон этого примера с помощью create-gramio-plugin
Список
В памяти
Установка
npm install @gramio/storage
yarn add @gramio/storage
pnpm add @gramio/storage
bun install @gramio/storage
Использование
- С использованием стандартного Map
import { inMemoryStorage } from "@gramio/storage";
const storage = inMemoryStorage();
- Предоставление своего собственного Map
import { inMemoryStorage, type InMemoryStorageMap } from "@gramio/storage";
const map: InMemoryStorageMap = new Map();
const storage = inMemoryStorage(map);
Redis
Установка
npm install @gramio/storage-redis
yarn add @gramio/storage-redis
pnpm add @gramio/storage-redis
bun install @gramio/storage-redis
Использование
- Предоставление параметров ioredis для функции
redisStorage
import { redisStorage } from "@gramio/storage-redis";
const storage = redisStorage({
host: process.env.REDIS_HOST,
});
- Предоставление экземпляра ioredis для функции
redisStorage
import { redisStorage } from "@gramio/storage-redis";
import { Redis } from "ioredis";
const redis = new Redis({
host: process.env.REDIS_HOST,
});
const storage = redisStorage(redis);
Советы
- Вы можете установить переменную окружения
DEBUG
вioredis:*
для вывода отладочной информации:
DEBUG=ioredis:* npm run start
и это будет выглядеть так:
ioredis:redis write command[::1:6379]: 0 -> get([ '@gramio/scenes:617580375' ]) +187ms
ioredis:redis write command[::1:6379]: 0 -> set([ '@gramio/scenes:617580375', '{"name":"scene-name","state":{},"stepId":0,"previousStepId":0,"firstTime":false}' ]) +1ms
- Для проверки того, какие данные хранятся в Redis, мы рекомендуем использовать графические клиенты, такие как AnotherRedisDesktopManager.
