tg-cli-node icon indicating copy to clipboard operation
tg-cli-node copied to clipboard

How send inital message (not replay)?

Open SadhuRus opened this issue 8 years ago • 9 comments

Thank you for this work!

I want to ask, how do I send a message as soon as I started the node script? (Do not wait for an answer)

   //This is Not work:
  connection._executeCommand("msg","Name","TestOfExecute");

  // This work if we reseave message (do execute forever. Why not once?)
   connection.on('message', message => {
       connection._executeCommand("msg","Name","TestOfExecute");
   });

SadhuRus avatar Apr 24 '17 12:04 SadhuRus

@SadhuRus TelegramAPI.connect() method callback calling after creating socket, not after full initializing tg-cli, use setTimeout.

setTimeout(() => {
    connection.send('Name', 'TestOfExecute');
}, 1000);

P.S. Можно писать на русском :)

Perkovec avatar Apr 24 '17 15:04 Perkovec

Спасибо, Илья!

Уже пробовал делать таймауты.. Но к сожалению это не помогает.. Пишет что "выполняется" хотя на самом деле ничего не происходит:

Код:

const TelegramAPI = require('tg-cli-node');
const config = require('./config.js');

const Client = new TelegramAPI(config);
Client.connect(function (connection){

  setTimeout(() => {
    connection.send('Name', 'Тестовое сообщение');
}, 1000);

});

Вывод консоли:

root@myfuns:~# node telegramServer.js
starting child process
executing command: msg Name "Тестовое сообщение"

SadhuRus avatar Apr 25 '17 12:04 SadhuRus

@SadhuRus пофиксил в #73618c2, теперь нужно обновить пакет.

Perkovec avatar Apr 25 '17 14:04 Perkovec

Обновил, но к сожалению это не помогло =(

SadhuRus avatar Apr 25 '17 16:04 SadhuRus

@SadhuRus к сожалению как-то наверняка отследить полную инициализацию клиента невозможно, так как идет просто чтение данных с процесса клиента по сокету. Идей, кроме как увеличить время таймера - нет на данный момент.

Perkovec avatar Apr 25 '17 17:04 Perkovec

Илья, к сожалению беда не в таймере.. Почему-то не работает имменно отправка. По логу пишет - отправлено. А по факту ничего не приходит..

root@myfuns:~# node telegramServer.js
starting child process
executing command: msg Name TestOfExecute12355

SadhuRus avatar Apr 26 '17 07:04 SadhuRus

Ещё заметил такой баг:

При выполнении кода (необязательно именно такого, это происходит с любым другим тоже):

Client.connect(function (connection){
  setTimeout(function(){
          connection.contactList().then(data => {
            data.forEach(function(item, i, data) {
            console.log(item["print_name"]," ",item["username"]);
          });
    });

  }, 2000);

Происходит следующее явление: Иногда скрипт выполняется и всё хорошо. Но в большинстве случае скрипт выходит даже не дождавшись таймаута (величина таймаута не имеет значения) срипт закрывается без видимых на то причин.

root@myfuns:~# node telegramServer.js
starting child process
root@myfuns:~# node telegramServer.js
starting child process

А иногда (реже всего, но тоже случается, скрипт выдаёт такое и зависает намертво (не выдавая результатов):

root@myfuns:~# node telegramServer.js
starting child process
executing command: contact_list

SadhuRus avatar Apr 26 '17 08:04 SadhuRus

У меня тоже возникает подобная проблема, как я заметил, не возможно написать первым человеку, все хорошо работает, если сначала тебе написали, а потом ты уже можешь писать сколько угодно. И речь тут идет о каждом человеке отдельно. То есть, с одним диалог уже может быть налажен, если он написал первым, а к другому пакеты так и не идут. Вопрос все же не в инициализации

adascal avatar Jun 02 '17 20:06 adascal

У меня тоже возникает подобная проблема, как я заметил, не возможно написать первым человеку, все хорошо работает, если сначала тебе написали, а потом ты уже можешь писать сколько угодно. И речь тут идет о каждом человеке отдельно. То есть, с одним диалог уже может быть налажен, если он написал первым, а к другому пакеты так и не идут. Вопрос все же не в инициализации

в тг реализован обмен по peer_id, если ты еще не общался с человеком, то по имени ты ему не напишешь, пиши по его id. Есть отдельный метод получения инфы о пользователе по его id. При первом написании вначале надо вызвать его и тогда cli запомнит его id => name

Liiion911 avatar Nov 21 '18 14:11 Liiion911