РЕШЕНО У меня проблема

Тема в разделе "Arduino & Shields", создана пользователем Maksym223, 24 ноя 2021.

  1. Maksym223

    Maksym223 Нерд

    У меня проблема, я хочу управлять платой esp node mcu через Телеграм. Пишу код в Arduino ide, ошибка;
    'class UniversalTelegramBot' has no member named 'deleteMessage'; did you mean 'sendMessage'?
    Вот код:
    Код (Text):
    #include <ESP8266WiFi.h>
    #include <WiFiClientSecure.h>
    #include <UniversalTelegramBot.h>

    #define BOTtoken "xxxxx:xxxxxxxxxxxxxxx" // Токен бота в формате xxxxx:xxxxxxxxxxxxxxx, начните беседу с ботом "BotFather" в Telegram и,
    // следуя инструкциям, создайте нового бота. Вам будет выдан секретный токен. Никому его не сообщайте.
    char ssid[] = "WiFi_Name"; // SSID (имя) вашей WiFi сети
    char password[] = "12345678"; // пароль wifi сети
    String buttons[] = {"light", "Socket"}; // имена подключенных устройств, с кириллицей НЕ РАБОТАЕТ!
    int pin[] = {5, 4}; // номер вывода, к которому подключено исполняющее устройство (реле, транзистор и т.д.)

    bool protection = 0; // права доступа: 0 - доступно всем пользователям, 1 - доступ по Chat ID, если оно внесено в chatID_acces.
    int chatID_acces[] = {}; // Chat ID, которым разрешен доступ, игнорируется, если protection = 0.
    // Примечание: по команде /start в Telegram, если у пользователя нет прав доступа на управление устройством, бот выдаст Chat ID
    // этого пользователя, чтобы его можно было внести в chatID_acces. Chat ID - это уникальный номер чата, который выдается
    // пользователю, начавшему общение с ботом.

    String on_symbol="✅ "; // Индикатор включенного состояния, можно заменить, например, на "Вкл."
    String off_symbol="☑ "; // Индикатор выключенного состояния.

    //Дальше ничего интересного, но если хотите, можете посмотреть.

    WiFiClientSecure client;
    UniversalTelegramBot bot(BOTtoken, client);
    int quantity;
    int Bot_mtbs = 3000;
    long Bot_lasttime;
    bool Start = false;
    const int ledPin = 2;
    int ledStatus = 0;
    String keyboardJson = "";

    //int messageID;

    void handleNewMessages(int numNewMessages) {
    Serial.println("handleNewMessages");
    Serial.println(String(numNewMessages));


    for (int i=0; i<numNewMessages; i++) {
    String chat_id = String(bot.messages.chat_id);
    String m_id = String(bot.messages.message_id);
    if (bot.messages.type == "callback_query") {
    String statusMessage;
    for (int i1=0; i1<quantity; i1++) {
    if (bot.messages.text == buttons[i1]) {
    digitalWrite (pin[i1], !digitalRead(pin[i1]));
    }
    digitalRead(pin[i1])?statusMessage+=on_symbol:statusMessage+=off_symbol;
    statusMessage+=buttons[i1];
    statusMessage+='\n';
    }
    bot.deleteMessage(bot.messages.chat_id, bot.messages.message_id);
    bot.sendMessageWithInlineKeyboard(bot.messages.chat_id, statusMessage, "", keyboardJson);

    } else {
    String text = bot.messages.text;
    Serial.println(m_id);
    String from_name = bot.messages.from_name;
    if (from_name == "") from_name = "Guest";
    int i2=0;
    do{
    if (!protection || String(chatID_acces[i2]) == chat_id) {
    if (text == "/control") {
    String statusMessage;
    for (int i=0; i<quantity; i++) {
    digitalRead(pin)?statusMessage+=on_symbol:statusMessage+=off_symbol;
    statusMessage+=buttons;
    statusMessage+='\n';
    }
    bot.sendMessageWithInlineKeyboard(chat_id, statusMessage, "", keyboardJson);
    }

    if (text == "/start") {
    String welcome = "Приветствую " + from_name + ".\n";
    welcome += "Это умный выключатель на микроконтроллере ESP8266, управляемый через Telegram.\n\n";
    welcome += "/control : перейти к управлению.\n";
    String keyboardStart = "[[{ \"text\" : \"YouTube канал автора\", \"url\" : \"\" }]]";
    bot.sendMessageWithInlineKeyboard(chat_id, welcome, "", keyboardStart);
    }
    break;
    }else{
    if (i2==((sizeof(chatID_acces)/sizeof(int))-1)&&text == "/start"||(sizeof(chatID_acces)/sizeof(int))==0&&text == "/start") {
    bot.sendMessage(chat_id, "No access, Chat ID: "+chat_id, "");
    }
    }

    i2++;
    }while (i2<(sizeof(chatID_acces)/sizeof(int)));
    }
    }
    }

    void setup() {
    Serial.begin(115200);

    WiFi.mode(WIFI_STA);
    WiFi.disconnect();
    delay(100);

    Serial.print("Connecting Wifi: ");
    Serial.println(ssid);
    WiFi.begin(ssid, password);

    while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
    }

    Serial.println("");
    Serial.println("WiFi connected");
    Serial.print("IP address: ");
    Serial.println(WiFi.localIP());
    quantity=sizeof(pin)/sizeof(int);
    for (int i=0; i<quantity; i++) {
    pinMode(pin, OUTPUT);
    }

    for (int i=0; i<quantity; i++) {
    if(i==0) keyboardJson += "[";
    keyboardJson += "[{ \"text\" : \"";
    keyboardJson += buttons;
    keyboardJson += "\", \"callback_data\" : \"";
    keyboardJson += buttons;
    keyboardJson += "\" }]";
    if(i==quantity-1){
    keyboardJson += "]";
    }else{
    keyboardJson += ",";
    }
    }
    delay(10);
    client.setInsecure();
    }

    void loop() {
    if (millis() > Bot_lasttime + Bot_mtbs) {
    int numNewMessages = bot.getUpdates(bot.last_message_received + 1);

    while(numNewMessages) {
    handleNewMessages(numNewMessages);
    numNewMessages = bot.getUpdates(bot.last_message_received + 1);
    }
    Bot_lasttime = millis();
    }
    }
     

    Вложения:

    Последнее редактирование модератором: 25 ноя 2021
  2. b707

    b707 Гуру

    вставьте код в сообщение по правилам форума и процитируйте сообщение об ошибке точно
     
    Airbus нравится это.
  3. Maksym223

    Maksym223 Нерд

    Готово
     
  4. b707

    b707 Гуру

    неправильно.
    Из вложенного файла вряд ли кто-то будет открывать.
    Например мне - банально лень
     
  5. Airbus

    Airbus Радиохулиган Модератор

    Вам правильно сказали. Код надо вставлять и притом правильно ибо и правда никто не будет открывать левые файлы. Сделать это за Вас?
    Что могу сказать навскидку—библиотека UniversalTelegramBot рабочая скачайте последнюю версию. И смотрите код из примеров, мудрить не надо. Что то я не помню таких команд deleteMessage?