Ответы пользователя по тегу Telegram
  • Может ли бот реагировать на сообщения в чате?

    IgorPI
    @IgorPI
    Может ли бот реагировать на сообщения в чате?

    Может.

    Удалить сообщение
    Используйте этот метод для удаления сообщения, включая служебные, со следующими ограничениями:
    - Сообщение может быть удалено только в том случае, если оно было отправлено менее 48 часов назад.
    - Сообщение в кости в приватном чате можно удалить только в том случае, если оно было отправлено более 24 часов назад.
    - Боты могут удалять исходящие сообщения в приватных чатах, группах и супергруппах.
    - Боты могут удалять входящие сообщения в приватных чатах.
    - Боты с правами can_post_messages могут удалять исходящие сообщения в каналах.
    - Если бот является администратором группы, он может удалить там любое сообщение.
    - Если у бота есть разрешение can_delete_messages в супергруппе или канале, он может удалить там любое сообщение.

    По теме
    Ответ написан
  • Какой конструктор ботов телеграм выбрать?

    IgorPI
    @IgorPI
    Microsoft bot composer.

    Там есть визуальный конструктор и я прям скажу достаточно мощный.
    Я не шучу.

    composer-overview.png
    Ответ написан
    Комментировать
  • Как передать переменную из одной сцены в другую?

    IgorPI
    @IgorPI
    Сессия и её абстрактное понятие.

    Я недавно написал универсального бота, хотя опыта в строение ботов не было.
    Так вот, как раз там есть сессия.
    Сессия позволяет изменять поведение диалога по ходу пьесы.

    Приведу пример моего велосипеда.

    Интерфейс сессии
    export interface SessionInterface {
        bot: BotInterface;
        state: SessionStateInterface;
        initialState: SessionStateInterface;
        SID: string;
        isNew: boolean;
        inDialog: boolean;
        user: UserInterface;
        send(message: any, options?: any): Promise<any>;
        resetState(): void;
        setState(state: SessionStateInterface): void;
    }


    Интерфейс состояния сессии
    export interface SessionStateInterface {
        [key: string]: any;
    }


    А это реализация описанных интерфейсов
    interface SessionConstructorPropsInterface {
        bot: BotInterface;
        initialState?: SessionStateInterface;
    }
    
    export class Session implements SessionInterface {
        bot: BotInterface;
        user: UserInterface;
        state: SessionStateInterface;
        initialState: SessionStateInterface;
        SID: string;
        isNew: boolean;
        inDialog: boolean;
        constructor({  bot, initialState }: SessionConstructorPropsInterface) {
            this.isNew = true;
            this.bot = bot;
            this.initialState = initialState || {};
            this.state = Object.assign({}, initialState);
        }
    
        send(message: any, options: any): Promise<void> {
            this.isNew = false;
            return this.bot.adapter.send(message, options);
        }
    
        resetState(): void {
            this.state = Object.assign({}, this.initialState);
        }
    
        setState(state: SessionStateInterface): void {
            Object.keys(state).forEach((key) => {
                this.state[key] = state[key];
            });
        }
    }


    Например, в диалоге | обработчике диалога
    main.use(/\/login/i, async ({message, session}: BotContextInterface, next) => {
    
      // Здесь я сохраняю состояние
      session.setState({
        processLogin: true,
        processLoginStep: 'login'
      })
    
      // Если мне нужно получить состояние
      console.log(session.state.processLogin)
    
    });


    Описанный выше код позволяет хранить состояние бота
    Ответ написан