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

 
Andrey Kaunov #:

Используя Channel Name получается отправить только в публичный канал.

А себе в личку не выходит (Error: Bad Request). Получается только по Channel ID. Это так и должно работать, или я не так что то делаю?


Valeriy Yastremskiy #:

У меня работает, в канале там имя канала и идентификатор, а типа себе, вернее своему боту только идентификатор. Себе или кому либо в личку вроде не описано как.


Валерий, читайте внимательнее мой пост.

Я не пишу, что НЕ отправляется в личку. Я пишу, что НЕ отправляется в личку по имени!

 
Andrey Kaunov #:



Валерий, читайте внимательнее мой пост.

Я не пишу, что НЕ отправляется в личку. Я пишу, что НЕ отправляется в личку по имени!

Да, не до понял, не знаю, боту тоже по имени не отправляется, только по идентификатору. А себе как оформляете отправление? Вернее как получаете id свой в телеге? У меня только в бот получается.

Дефайны на ум приходят только или АПИ телеги ковырять.

 
Valeriy Yastremskiy #:

Да, не до понял, не знаю, боту тоже по имени не отправляется, только по идентификатору. А себе как оформляете отправление? Вернее как получаете id свой в телеге? У меня только в бот получается.

Дефайны на ум приходят только или АПИ телеги ковырять.

Идеология ботов такая, что бот не может сам начинать беседу, а значит и не может вам что то писать.

Бот в личке может только отвечать...

 
Valeriy Yastremskiy #:

Да, не до понял, не знаю, боту тоже по имени не отправляется, только по идентификатору. А себе как оформляете отправление? Вернее как получаете id свой в телеге? У меня только в бот получается.

Любой ID получаю через бота Get My ID

 
Andrey Kaunov #:

Любой ID получаю через бота Get My ID

Да, перепутал свой id и бота. Мы же себе в личку шлем от своего бота))) 

Из статьи Андрея

Стоит отметить, что в этих примерах в качестве получателя сообщения мы передаем номер чата chat_id. Мы не можем знать его заранее, чтобы отослать сообщение пользователю, пока он первым не начнет общение с ботом. Обратиться к пользователю по его номеру мобильного телефона или @username также нет возможности. Это сделано, очевидно, в целях безопасности, чтобы боты не рассылали спам. А вот публиковать сообщения на канале боты могут, обращаясь по его имени используя второй вариант SendMessage.

 

У меня на прошлой неделе возник какой-то глюк - перестал работать функция считывания очереди сообщений из Телеграмма. Т.е. исходящие сообщения отправляются как и раньше, как текст, так и скрин7-шоты,ю а вот функция GetUpdates() ничего не возвращает, писок чатов всегда пуст. 

Кто-нибудь сталкивался с таким глюком? В чем может быть причина?

 
Здравствуйте!
Спасибо огромное за такую работу!!!!
подскажи пожалуйста, а как можно менять шрифт, фон, цвет текста?
Спасибо
 
lbgraf #:
Здравствуйте!
Спасибо огромное за такую работу!!!!
подскажи пожалуйста, а как можно менять шрифт, фон, цвет текста?
Спасибо

Все теги описаны в доках на API Telegram.

 
lbgraf #:
Здравствуйте!
Спасибо огромное за такую работу!!!!
подскажи пожалуйста, а как можно менять шрифт, фон, цвет текста?
Спасибо

Например для жирного шрифта надо включить HTML отправку в Telegram.mqh

const bool    _as_HTML=true

И потом отправить текст в теге <b>

 
Здравствуйте Andriy Voitenko, немножко переделал  код  функции  SendScreenShot()  так как  bot.SendPhoto(_chat_id,filename,screen_id,_symbol+"_"+StringSubstr(EnumToString(_period),7)) не соответствует входным параметрам ни одной из моделей функции  SendPhoto()  в файле  <Telegram.mqh>, при отправке файла .gif получаю ошибку 400 что то не срабатывает именно в одной из функций  SendPhoto() (использую вторую модель функции из трех представленных в файле  <Telegram.mqh>  655 строчка) не могли бы Вы по возможности обновить код чтоб оно заработало?    
Andriy Voitenko #:

Роман, если вам бот нужен только для отправки скриншотов, то можно сделать так:

1. Узнайте у бота @MyTelegramID_bot‌ номер вашего чата.

2. Напишите простого бота который будет проверять наличие новых позиций и отправлять картинки в чат с указанным ID. Пример такой:

#include <Telegram.mqh>
//+------------------------------------------------------------------+
//|   Input parameters                                               |
//+------------------------------------------------------------------+
input ENUM_LANGUAGES    InpLanguage=LANGUAGE_EN;//Language
input string            InpToken="";//Token
input long              ChatId=0;   //Chat ID
//---
CCustomBot bot;
int pos_count;
//+------------------------------------------------------------------+
int OnInit()
  {
   bot.Token(InpToken);
   int res=bot.GetMe();
   if(res!=0)
     {
      Print(GetErrorDescription(res));
     }
   pos_count=PositionCount(_Symbol);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   int pos_count_new=PositionCount(_Symbol);
   if(pos_count_new>pos_count)
     {
      pos_count=pos_count_new;
      int result=SendScreenShot(ChatId,_Symbol,0,NULL);
      if(result!=0)
         Print(GetErrorDescription(result,InpLanguage));
     }
  }
//+------------------------------------------------------------------+
int PositionCount(const string _symbol)
  {
   int count=0;
   int orders_total=OrdersTotal();
   for(int i=0; i<orders_total; i++)
     {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         PrintError(ERR_ORDER_SELECT);
         return(-1);
        }
      //---
      if(_symbol==NULL || OrderSymbol()==_symbol)
         count++;
     }
//---  
   return(count);
  }
//+------------------------------------------------------------------+
int SendScreenShot(const long _chat_id,
                   const string _symbol,
                   const ENUM_TIMEFRAMES _period,
                   const string _template=NULL)
  {
   int result=0;

   long chart_id=ChartOpen(_symbol,_period);
   if(chart_id==0)
      return(ERR_CHART_NOT_FOUND);

   ChartSetInteger(ChartID(),CHART_BRING_TO_TOP,true);

//--- updates chart
   int wait=60;
   while(--wait>0)
     {
      if(SeriesInfoInteger(_symbol,_period,SERIES_SYNCHRONIZED))
         break;
      Sleep(500);
     }

   if(_template!=NULL)
      if(!ChartApplyTemplate(chart_id,_template))
         PrintError(_LastError,InpLanguage);

   ChartRedraw(chart_id);
   Sleep(500);

   ChartSetInteger(chart_id,CHART_SHOW_GRID,false);

   ChartSetInteger(chart_id,CHART_SHOW_PERIOD_SEP,false);

   string filename=StringFormat("%s%d.gif",_symbol,_period);

   if(FileIsExist(filename))
      FileDelete(filename);
   ChartRedraw(chart_id);

   Sleep(100);

//      if(ChartScreenShot(chart_id,filename,800,600,ALIGN_RIGHT))
   if(ChartScreenShot(chart_id,filename,1024,768,ALIGN_RIGHT))
     {
      Sleep(100);

      bot.SendChatAction(_chat_id,ACTION_UPLOAD_PHOTO);

      //--- waitng 30 sec for save screenshot
      wait=60;
      while(!FileIsExist(filename) && --wait>0)
         Sleep(500);

      //---
      string screen_id;
      result=bot.SendPhoto(_chat_id,filename,screen_id,_symbol+"_"+StringSubstr(EnumToString(_period),7));
     }

   ChartClose(chart_id);
   return(result);
  }

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