Загрузка...

Бот отвечает на сообщения в чате

Тема в разделе Node.js создана пользователем RichPerson 11 авг 2022. 241 просмотр

  1. RichPerson
    RichPerson Автор темы 11 авг 2022 Разработка - https://zelenka.guru/threads/4480553/ 2160 23 сен 2019
    Возникла проблемка, бот отвечает на команду /start в чате админки и даже там создал клавиатуру. Как сделать чтобы он отвечал на сообщения в самом чате с ботом, а не везде где добавлен. Просто нигде не могу найти перегрузки метода ctx.reply, мб там есть отправка по ctx.from.id? Прошу помочь с данной задачей.
    Вот код
    !Также хочу добавить что метод bot.telegram.SendMessage не подходит, так как он не создает клавиатуру!

    JavaScript
    var UserIdForTeam
    var UserNameForTeam
    //Функции//
    //Создание данных о новом пользователе
    function AddUser(UserId){

    const UserInfo = {
    id: UserId.toString(),
    balance: 0,
    count_profits: 0,
    summa_profits: 0,
    number_qiwi: 'Пусто',
    }
    const UserInfoJSON = JSON.stringify(UserInfo)

    fs.mkdirSync(path.join(__dirname, 'users', UserId.toString()), (error) => {
    if(error){
    throw error
    }
    })
    fs.writeFileSync(path.join(__dirname, 'users', UserId.toString(), 'UserInfo.json'), UserInfoJSON, err => {
    if(err){
    throw err
    }
    })
    fs.mkdirSync(path.join(__dirname, 'users', UserId.toString(), 'Url'), (err) => {
    if(err){
    throw err
    }
    })

    }

    function MyProfile(UserInfo) {
    return `Мой профиль\nМой ID: ${UserInfo.id}\nКоличество профитов: ${UserInfo.count_profits}\nСумма профитов: ${UserInfo.summa_profits}\nБаланс: ${UserInfo.balance}\nНомер ****: ${UserInfo.number_qiwi} `
    }
    function GetUserInfo(UserId){
    const PathFileInfo = path.join(__dirname, 'users', UserId.toString(), 'UserInfo.json')
    return JSON.parse(fs.readFileSync(PathFileInfo))
    }
    function DefaultKeyboard(){
    return ['Мой профиль', 'Создание ссылки']
    }
    bot.command('start', (ctx) => {
    var UserId = ctx.from.id
    if(fs.existsSync(path.join(__dirname, 'users', UserId.toString()))){
    const UserInfo = GetUserInfo(UserId)
    bot.telegram.sendMessage(ctx.from.id, MyProfile(UserInfo),{
    reply_markup: Markup.keyboard([
    DefaultKeyboard(),
    ['Изменить номер ****']
    ]).resize()
    })
    }
    else{
    UserIdForTeam = ctx.from.id
    UserNameForTeam = ctx.from.username
    ctx.reply(`Добро пожаловать в проект, ${ctx.from.first_name}, подавай заявку и жди принятия!\nАдминистрация: @ || @`, {
    reply_markup: Markup.keyboard(['Подать заявку']).resize()
    })
    console.log(UserIdForTeam)
    }
    })


    bot.on('message', (ctx) => {
    //Подать заявку
    if(ctx.message.text === 'Подать заявку'){
    ctx.reply('Заявка на вступление отправлена, ожидай', {
    reply_markup: Markup.removeKeyboard()
    })
    bot.telegram.sendMessage(admin_chat_id, `Бедолага @${UserNameForTeam} подал заявку на вступление`, {
    reply_markup: Markup.inlineKeyboard([
    [Markup.callbackButton('Принять в тиму', 'TrueTeam'),
    Markup.callbackButton('Отказать бедолаге', 'FalseTeam')
    ]

    ])
    })
    }
    //Мой профиль
    if(ctx.message.text === 'Мой профиль'){
    var UserId = ctx.from.id
    if(fs.existsSync(path.join(__dirname, 'users', UserId.toString()))){
    const UserInfo = GetUserInfo(UserId)
    ctx.reply(MyProfile(UserInfo), {
    reply_markup: Markup.keyboard([
    DefaultKeyboard(),
    ['Изменить номер ****']
    ]).resize()
    })
    }
    }
    if(ctx.message.text === 'Создание ссылки'){

    }
    })
    bot.action('TrueTeam', (ctx) => {
    console.log(UserIdForTeam)
    if(UserIdForTeam){
    if(fs.existsSync(path.join(__dirname, 'users', UserIdForTeam.toString()))){
    bot.telegram.sendMessage(admin_chat_id, `Бедолага @${UserNameForTeam} уже есть в тиме`)
    if(ctx){
    ctx.deleteMessage()
    }
    }
    else{
    bot.telegram.sendMessage(admin_chat_id, `Бедолага @${UserNameForTeam} был принят`)
    AddUser(UserIdForTeam)
    bot.telegram.sendMessage(UserIdForTeam, 'Бедолага, тебя приняли! Тыкай /start')
    if(ctx){
    ctx.deleteMessage()
    }
    }
    }

    })
    bot.action('FalseTeam', (ctx) => {
    if(UserIdForTeam){
    bot.telegram.sendMessage(UserIdForTeam, 'Сорян бедолага, ты нам не подходишь:(')
    bot.telegram.sendMessage(admin_chat_id, `Бедолага @${UserNameForTeam} слит`)
    if(ctx){
    ctx.deleteMessage()
    }
    }
    })

    bot.launch()
     
  2. MarkusKawakami
    Я думаю, лучше переделать то что происходит начиная с 44 строки. Тут бот добавляет команду старт, попробуй просто проверить если сообщение == /start то уже действия надобные
     
    1. Посмотреть предыдущие комментарии (1)
    2. RichPerson Автор темы
      MarkusKawakami, метод bot.telegram.SendMessage в итоге нормально работать начал, он приколы какие-то ловил, теперь клавиатуру отображает
    3. MarkusKawakami
      RichPerson, абы как, костылями, мы ошибку залатали
  3. LsdDance
    LsdDance 25 авг 2022 722 27 июн 2021
    bot.start()?
     
    1. LsdDance
      LsdDance, либо bot.command('/start')
Загрузка...
Top