Обсуждение статьи "Создание бота для Telegram на языке MQL5" - страница 17

 
Aleksei Beliakov:
Ты про приватный канал?

Да

 
можно посылать , посылай по id канала
 
Aleksei Beliakov:
можно посылать , посылай по id канала
Спасибо большое!
 

Иногда, при попытке отправить скриншот графика, пишет: "Error: Unknown error 5020" - файла не существует. Хотя в папке Files он присутствует. Такое повторяется иногда. Иногда все подряд публикует (более 3 секунд задержки между отправкой сообщений делаю). Сам алгоритм выглядит следующим образом: бот открывает график, переводит график у крайнюю правую позицию, создает стрелки (уровни ценовые), делает скриншот, отправляет его (после отправки задержка в 3 секунды как раз... без нее не хочет почему-то отправлять), удаляет стрелки и после проверки на наличие файла удаляет его. Или не удаляет. Если бот при отправке выдает ошибку 5020, то и функция FileIsExist возвращает брехню. Пробовал ставить задержки после создания файла не очень помогало. Отправляю в открытый канал. Расширение .gif.

Насколько это решение плохое (вот так отправлять скриншоты)? Код наверное далекий от идеала, но почему не хочет слать скрины? Вернее иногда нормально шлет , а иногда совсем не хочет. Интернет вроде нормальный...

 if(ScreenShotsAllowed) {
               long chartID = ChartOpen(symbolName,PERIOD_CURRENT);

               ResetLastError();
               if(!ChartNavigate(chartID,CHART_CURRENT_POS,WindowFirstVisibleBar())) {
                  Print ("Error at ChartNavigate: ", GetLastError());
               }

               createArrow(chartID,SymbolInfoDouble(symbolName,SYMBOL_BID),Time[0],BuyArrowCode,arrowBuy,clrDarkSlateGray);
               createArrow(chartID,SymbolInfoDouble(symbolName,SYMBOL_BID)+candleSize[i]*Target_1,Time[0],Target_1_Code,target_1,TpTargetColor);
               createArrow(chartID,SymbolInfoDouble(symbolName,SYMBOL_BID)+candleSize[i]*Target_2,Time[0],Target_2_Code,target_2,TpTargetColor);
               createArrow(chartID,SymbolInfoDouble(symbolName,SYMBOL_BID)+candleSize[i]*Target_3,Time[0],Target_3_Code,target_3,TpTargetColor);
               createArrow(chartID,low[i]-bufferSell[i],iTime(symbolName,PERIOD_CURRENT,0),SlCode,sl,SlTargetColor);

               ResetLastError();
               string filename = symbolName+fileExtension;
               PrintFormat("Filename: %s",filename);
               if(!ChartScreenShot(chartID,filename,(int)ChartGetInteger(chartID,CHART_WIDTH_IN_PIXELS,0),
                                   (int)ChartGetInteger(chartID,CHART_HEIGHT_IN_PIXELS,0),ALIGN_RIGHT)) {
                  Print ("Error at ChartScreenShot: ", GetLastError());
               } else {

                  string photo_id;
                  int result=bot.SendPhoto(photo_id,InpChannelName,filename,"screenshot");

                  if(result==0) {
                     Sleep(Delay);
                     Print("Photo ID: ",photo_id);
                     deleteObjects(chartID);
                  } else
                     Print("Error: ",GetErrorDescription(result));
                  if(FileIsExist(filename)) {
                     ResetLastError();
                     if(!FileDelete(filename)) {
                        PrintFormat("Cant delete file: %s, err code: %d",filename,GetLastError());
                     }else
                     PrintFormat("Deleted file: %s",filename);
                  }
               }

               ChartClose(chartID);
            }
 
Yevhenii Levchenko:

Иногда, при попытке отправить скриншот графика, пишет: "Error: Unknown error 5020" - файла не существует. Хотя в папке Files он присутствует. Такое повторяется иногда. Иногда все подряд публикует (более 3 секунд задержки между отправкой сообщений делаю). Сам алгоритм выглядит следующим образом: бот открывает график, переводит график у крайнюю правую позицию, создает стрелки (уровни ценовые), делает скриншот, отправляет его (после отправки задержка в 3 секунды как раз... без нее не хочет почему-то отправлять), удаляет стрелки и после проверки на наличие файла удаляет его. Или не удаляет. Если бот при отправке выдает ошибку 5020, то и функция FileIsExist возвращает брехню. Пробовал ставить задержки после создания файла не очень помогало. Отправляю в открытый канал. Расширение .gif.

Насколько это решение плохое (вот так отправлять скриншоты)? Код наверное далекий от идеала, но почему не хочет слать скрины? Вернее иногда нормально шлет , а иногда совсем не хочет. Интернет вроде нормальный...

Поищите, было обсуждение.

Файл не успевает записаться, нужно ждать.

 


Пытаемся использовать скрипт  Telegram_Bot_EA для отправки по запросу скрина графика. Чуть модифицировали его в плане выбора шаблонов и других инструментов. Но думаю, это не существенно. Допустим нас двое пользователей.

- Первый стартует бота, выбирает инструмент (допустим RI), выбирает ТФ - 5мин, делает паузу...

- второй стартует бота, выбирает инструмент (BR), выбирает ТФ - 30мин, выбирает шаблон "№1" - получает правильный скрин.

- первый продолжает и выбирает шаблон "№2" и получает.... картину, которую получил второй.


Т.е. в тот момент, когда первый сделал паузу, бот как-то перестроился на полученные данные от второго, а потом использовал их, когда первый закончил отправку запроса. Получается, переменные, где хранятся инструмент, ТФ, шаблон - они в некотором смысле глобальные, и поэтому они заменились.

Как можно решить эту проблему?

Пример на скрине ниже. Был заказан инструмент РТС, 5м.  Перед выбором шаблона задержались, в это время второй пользователь запрашивал свою картинку. Потом я продолжил выбор шаблона и получил BR, H1 вместо РТСа

Проблема следующая.



Как можно решить эту проблему?

 
StarleyNSK:

Т.е. в тот момент, когда первый сделал паузу, бот как-то перестроился на полученные данные от второго, а потом использовал их, когда первый закончил отправку запроса. Получается, переменные, где хранятся инструмент, ТФ, шаблон - они в некотором смысле глобальные, и поэтому они заменились.

Как можно решить эту проблему?

Анализируйте ай-ди пользователя, который запрашивает данные, и храните все с привязкой к этому ай-ди.

 
Здравствуйте. Есть ли возможность сделать, чтобы бот мог просматривать все сообщения в чате и цитировать определенное сообщение?  
 
Yevhenii Levchenko:

Иногда, при попытке отправить скриншот графика, пишет: "Error: Unknown error 5020" - файла не существует. Хотя в папке Files он присутствует. Такое повторяется иногда. Иногда все подряд публикует (более 3 секунд задержки между отправкой сообщений делаю). Сам алгоритм выглядит следующим образом: бот открывает график, переводит график у крайнюю правую позицию, создает стрелки (уровни ценовые), делает скриншот, отправляет его (после отправки задержка в 3 секунды как раз... без нее не хочет почему-то отправлять), удаляет стрелки и после проверки на наличие файла удаляет его. Или не удаляет. Если бот при отправке выдает ошибку 5020, то и функция FileIsExist возвращает брехню. Пробовал ставить задержки после создания файла не очень помогало. Отправляю в открытый канал. Расширение .gif.

Насколько это решение плохое (вот так отправлять скриншоты)? Код наверное далекий от идеала, но почему не хочет слать скрины? Вернее иногда нормально шлет , а иногда совсем не хочет. Интернет вроде нормальный...

Вместо задержки красивей использовать функцию проверки на наличие файла , но не просто наличие файла в каталоге,  а наличие у него длинны. Есть ситуации когда файл появляется с нулевой длиной, при этом процесс записи в него не завершен, и только после завершения записи длина фиксируется.

Можно в OnTime отслеживать.

 
Yuriy Zaytsev:

Вместо задержки красивей использовать функцию проверки на наличие файла , но не просто наличие файла в каталоге,  а наличие у него длинны. Есть ситуации когда файл появляется с нулевой длиной, при этом процесс записи в него не завершен, и только после завершения записи длина фиксируется.

Можно в OnTime отслеживать.

Да, это более полноценное решение. Спасибо за совет!

Причина обращения: