Skip to content

Commit 45b4958

Browse files
author
windka
committed
added sender node and examples
1 parent 4c27c4e commit 45b4958

5 files changed

Lines changed: 129 additions & 19 deletions

File tree

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
# Changelog
22
All notable changes to this project will be documented in this file.
33

4+
## [0.0.4]
5+
### Added sender node and examples
6+
47
## [0.0.3]
58
### Added simple login button in config node to ease login.
69

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[{"id":"ef6ab74579e1bbb4","type":"function","z":"3d8bc5187eb93fc0","name":"check username","func":"// see https://gram.js.org/tl/account/CheckUsername\n\nlet username = msg.payload;\nmsg.payload = {\n api: \"account\",\n func: \"CheckUsername\",\n args: {\n username: username\n }\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":400,"y":640,"wires":[["7f66f74d4da2179d"]]},{"id":"7f66f74d4da2179d","type":"telegram client sender","z":"3d8bc5187eb93fc0","name":"","bot":"b4217d5b3ad6f705","x":660,"y":640,"wires":[["fce968085d0d85fb"]]},{"id":"4edf7f29e51391dc","type":"inject","z":"3d8bc5187eb93fc0","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"Hugo","payloadType":"str","x":170,"y":640,"wires":[["ef6ab74579e1bbb4"]]},{"id":"fce968085d0d85fb","type":"debug","z":"3d8bc5187eb93fc0","name":"debug","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":830,"y":640,"wires":[]},{"id":"b4217d5b3ad6f705","type":"telegram client config","botname":"Username","verboselogging":false}]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[{"id":"7f66f74d4da2179d","type":"telegram client sender","z":"3d8bc5187eb93fc0","name":"","bot":"b4217d5b3ad6f705","x":660,"y":640,"wires":[["fce968085d0d85fb"]]},{"id":"fce968085d0d85fb","type":"debug","z":"3d8bc5187eb93fc0","name":"debug","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":830,"y":640,"wires":[]},{"id":"48d2b7cfa10e35d4","type":"function","z":"3d8bc5187eb93fc0","name":"send message","func":"// see https://gram.js.org/tl/messages/SendMessage\nlet username = msg.payload;\nmsg.payload = {\n api: 'messages',\n func: 'SendMessage',\n args: {\n peer: username,\n message: \"Hello there!\",\n randomId: BigInt(\"-4156887774564\"),\n noWebpage: true,\n noforwards: true,\n scheduleDate: 0,\n // sendAs: \"???\",\n }\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":400,"y":640,"wires":[["7f66f74d4da2179d"]]},{"id":"57bcd2488838edef","type":"inject","z":"3d8bc5187eb93fc0","name":"","props":[],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":170,"y":640,"wires":[["48d2b7cfa10e35d4"]]},{"id":"b4217d5b3ad6f705","type":"telegram client config","botname":"Username","verboselogging":false}]

telegrambot/telegrambot.html

Lines changed: 56 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
<!-- ------------------------------------------------------------------------------------------ -->
55
<script type="text/javascript">
6-
RED.nodes.registerType('telegram userbot config', {
6+
RED.nodes.registerType('telegram client config', {
77
category: 'config',
88
defaults: {
99
botname: { value: "", required: true },
@@ -110,7 +110,7 @@
110110
});
111111
</script>
112112

113-
<script type="text/x-red" data-template-name="telegram userbot config">
113+
<script type="text/x-red" data-template-name="telegram client config">
114114
<div class="form-row">
115115
<div class="form-row">
116116
<label for="node-config-input-botname"><i class="fa fa-telegram"></i> Name</label>
@@ -175,7 +175,7 @@
175175
</div>
176176
</script>
177177

178-
<script type="text/x-red" data-help-name="telegram userbot config">
178+
<script type="text/x-red" data-help-name="telegram client config">
179179
<p>A configuration node that holds the configuration of the telegram bot.</p>
180180

181181
<h3>Details</h3>
@@ -186,19 +186,19 @@ <h3>Details</h3>
186186

187187
<!-- ------------------------------------------------------------------------------------------ -->
188188
<script type="text/javascript">
189-
RED.nodes.registerType('telegram userbot receiver', {
189+
RED.nodes.registerType('telegram client receiver', {
190190
category: 'telegram',
191191
color: '#3BABDD',
192192
defaults: {
193193
name: { value: "" },
194-
bot: { value:"", type: "telegram userbot config", required: true }
194+
bot: { value:"", type: "telegram client config", required: true }
195195
},
196196
inputs: 0,
197197
outputs: 1,
198198
icon: "telegram.png",
199-
paletteLabel: "userbot",
199+
paletteLabel: "client",
200200
label: function () {
201-
return this.name || "Telegram userbot";
201+
return this.name || "Telegram client";
202202
},
203203
labelStyle: function() {
204204
return this.name?"node_label_italic":"";
@@ -208,7 +208,7 @@ <h3>Details</h3>
208208
});
209209
</script>
210210

211-
<script type="text/x-red" data-template-name="telegram userbot receiver">
211+
<script type="text/x-red" data-template-name="telegram client receiver">
212212
<div class="form-row">
213213
<label for="node-input-bot"><i class="fa fa-telegram"></i> Bot</label>
214214
<input type="text" id="node-input-bot" placeholder="Bot">
@@ -219,7 +219,7 @@ <h3>Details</h3>
219219
</div>
220220
</script>
221221

222-
<script type="text/x-red" data-help-name="telegram userbot receiver">
222+
<script type="text/x-red" data-help-name="telegram client receiver">
223223
<p>A telegram node that triggers the output when some message is received from the chat.</p>
224224
<p>The node receives all messages received from the telegram server.</p>
225225

@@ -228,3 +228,50 @@ <h3>Outputs</h3>
228228
</script>
229229

230230
<!-- ------------------------------------------------------------------------------------------ -->
231+
232+
<script type="text/javascript">
233+
RED.nodes.registerType('telegram client sender', {
234+
category: 'telegram',
235+
color: '#3BABDD',
236+
defaults: {
237+
name: { value: "" },
238+
bot: { value:"", type: "telegram client config", required: true }
239+
},
240+
inputs: 1,
241+
outputs: 1,
242+
icon: "telegram.png",
243+
paletteLabel: "client",
244+
label: function () {
245+
return this.name || "Telegram client";
246+
},
247+
labelStyle: function() {
248+
return this.name?"node_label_italic":"";
249+
},
250+
oneditprepare: function() {
251+
}
252+
});
253+
</script>
254+
255+
<script type="text/x-red" data-template-name="telegram client sender">
256+
<div class="form-row">
257+
<label for="node-input-bot"><i class="fa fa-telegram"></i> Bot</label>
258+
<input type="text" id="node-input-bot" placeholder="Bot">
259+
</div>
260+
<div class="form-row">
261+
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
262+
<input type="text" id="node-input-name" placeholder="Name">
263+
</div>
264+
</script>
265+
266+
<script type="text/x-red" data-help-name="telegram client sender">
267+
<p>A telegram node that sends messaged to a chat.</p>
268+
<p>The node receives data and sends it to the telegram server.</p>
269+
270+
<h3>Inputs</h3>
271+
<p>TODO:</p>
272+
273+
<h3>Inputs</h3>
274+
<p></p>
275+
</script>
276+
277+
<!-- ------------------------------------------------------------------------------------------ -->

telegrambot/telegrambot.js

Lines changed: 68 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
module.exports = function (RED) {
44
'use strict';
55

6-
const { TelegramClient } = require('telegram');
6+
const { Api, TelegramClient } = require('telegram');
77
const { StringSession } = require('telegram/sessions');
88
const { NewMessage } = require('telegram/events');
99

@@ -201,7 +201,7 @@ module.exports = function (RED) {
201201
done();
202202
});
203203
}
204-
RED.nodes.registerType('telegram userbot config', TelegramConfigNode, {
204+
RED.nodes.registerType('telegram client config', TelegramConfigNode, {
205205
credentials: {
206206
apiid: { type: 'text' },
207207
apihash: { type: 'text' },
@@ -261,12 +261,70 @@ module.exports = function (RED) {
261261
done();
262262
});
263263
}
264-
RED.nodes.registerType('telegram userbot receiver', TelegramReceiverNode);
265-
};
264+
RED.nodes.registerType('telegram client receiver', TelegramReceiverNode);
266265

267-
// TODO:
268-
// await client.sendMessage(sender, {
269-
// message: `hi your id is ${message.senderId}`,
270-
//});
271-
// const entity = await client.getEntity('Windhose');
272-
// await client.sendMessage(entity, { message: 'Hello!' });
266+
// --------------------------------------------------------------------------------------------
267+
// The sender node sends messages.
268+
function TelegramSenderNode(config) {
269+
RED.nodes.createNode(this, config);
270+
let node = this;
271+
this.bot = config.bot;
272+
this.config = RED.nodes.getNode(this.bot);
273+
274+
const start = async () => {
275+
let client = await node.config.getTelegramClient();
276+
if (client) {
277+
node.status({
278+
fill: 'green',
279+
shape: 'ring',
280+
text: 'connected',
281+
});
282+
}
283+
};
284+
start();
285+
286+
this.processMessage = function (client, msg, nodeSend, nodeDone) {
287+
if (msg.payload !== undefined) {
288+
let api = msg.payload.api;
289+
let func = msg.payload.func;
290+
let args = msg.payload.args || {};
291+
292+
if (api !== undefined && func !== undefined) {
293+
(async () => {
294+
try {
295+
const result = await client.invoke(new Api[api][func](args));
296+
msg.payload = result;
297+
nodeSend(msg);
298+
} catch (error) {
299+
nodeDone(error);
300+
}
301+
})();
302+
} else {
303+
nodeDone('msg.payload: api or func is missing.');
304+
}
305+
}
306+
307+
// TODO:
308+
// await client.sendMessage(sender, {
309+
// message: `hi your id is ${message.senderId}`,
310+
//});
311+
// const entity = await client.getEntity('Windhose');
312+
// await client.sendMessage(entity, { message: 'Hello!' });
313+
};
314+
315+
this.on('input', async function (msg, nodeSend, nodeDone) {
316+
if (msg.payload) {
317+
let client = await node.config.getTelegramClient();
318+
if (client) {
319+
this.processMessage(client, msg, nodeSend, nodeDone);
320+
}
321+
}
322+
});
323+
324+
this.on('close', function (removed, done) {
325+
node.status({});
326+
done();
327+
});
328+
}
329+
RED.nodes.registerType('telegram client sender', TelegramSenderNode);
330+
};

0 commit comments

Comments
 (0)