koztv-blog-tools 1.2.5 → 1.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -374,6 +374,42 @@ var import_sessions = require("telegram/sessions");
374
374
  var fs = __toESM(require("fs"));
375
375
  var path = __toESM(require("path"));
376
376
  var readline = __toESM(require("readline"));
377
+ function entitiesToMarkdown(text, entities) {
378
+ if (!entities || entities.length === 0) return text;
379
+ const sorted = [...entities].sort((a, b) => b.offset - a.offset);
380
+ let result = text;
381
+ for (const entity of sorted) {
382
+ const start = entity.offset;
383
+ const end = entity.offset + entity.length;
384
+ const content = result.substring(start, end);
385
+ let replacement = content;
386
+ if (entity instanceof import_telegram.Api.MessageEntityBold) {
387
+ replacement = `**${content}**`;
388
+ } else if (entity instanceof import_telegram.Api.MessageEntityItalic) {
389
+ replacement = `*${content}*`;
390
+ } else if (entity instanceof import_telegram.Api.MessageEntityCode) {
391
+ replacement = `\`${content}\``;
392
+ } else if (entity instanceof import_telegram.Api.MessageEntityPre) {
393
+ replacement = `\`\`\`
394
+ ${content}
395
+ \`\`\``;
396
+ } else if (entity instanceof import_telegram.Api.MessageEntityStrike) {
397
+ replacement = `~~${content}~~`;
398
+ } else if (entity instanceof import_telegram.Api.MessageEntityUnderline) {
399
+ replacement = `**${content}**`;
400
+ } else if (entity instanceof import_telegram.Api.MessageEntityTextUrl) {
401
+ replacement = `[${content}](${entity.url})`;
402
+ } else if (entity instanceof import_telegram.Api.MessageEntityUrl) {
403
+ replacement = content;
404
+ } else if (entity instanceof import_telegram.Api.MessageEntityMention) {
405
+ replacement = content;
406
+ } else if (entity instanceof import_telegram.Api.MessageEntityHashtag) {
407
+ replacement = content;
408
+ }
409
+ result = result.substring(0, start) + replacement + result.substring(end);
410
+ }
411
+ return result;
412
+ }
377
413
  async function defaultReadline(prompt) {
378
414
  const rl = readline.createInterface({
379
415
  input: process.stdin,
@@ -537,7 +573,7 @@ async function exportTelegramChannel(options) {
537
573
  }
538
574
  }
539
575
  }
540
- const content = message.message || "";
576
+ const content = entitiesToMarkdown(message.message || "", message.entities);
541
577
  const link = channelMeta.username ? `https://t.me/${channelMeta.username}/${msgId}` : "";
542
578
  const post = {
543
579
  msgId,
package/dist/index.mjs CHANGED
@@ -317,6 +317,42 @@ import { StringSession } from "telegram/sessions";
317
317
  import * as fs from "fs";
318
318
  import * as path from "path";
319
319
  import * as readline from "readline";
320
+ function entitiesToMarkdown(text, entities) {
321
+ if (!entities || entities.length === 0) return text;
322
+ const sorted = [...entities].sort((a, b) => b.offset - a.offset);
323
+ let result = text;
324
+ for (const entity of sorted) {
325
+ const start = entity.offset;
326
+ const end = entity.offset + entity.length;
327
+ const content = result.substring(start, end);
328
+ let replacement = content;
329
+ if (entity instanceof Api.MessageEntityBold) {
330
+ replacement = `**${content}**`;
331
+ } else if (entity instanceof Api.MessageEntityItalic) {
332
+ replacement = `*${content}*`;
333
+ } else if (entity instanceof Api.MessageEntityCode) {
334
+ replacement = `\`${content}\``;
335
+ } else if (entity instanceof Api.MessageEntityPre) {
336
+ replacement = `\`\`\`
337
+ ${content}
338
+ \`\`\``;
339
+ } else if (entity instanceof Api.MessageEntityStrike) {
340
+ replacement = `~~${content}~~`;
341
+ } else if (entity instanceof Api.MessageEntityUnderline) {
342
+ replacement = `**${content}**`;
343
+ } else if (entity instanceof Api.MessageEntityTextUrl) {
344
+ replacement = `[${content}](${entity.url})`;
345
+ } else if (entity instanceof Api.MessageEntityUrl) {
346
+ replacement = content;
347
+ } else if (entity instanceof Api.MessageEntityMention) {
348
+ replacement = content;
349
+ } else if (entity instanceof Api.MessageEntityHashtag) {
350
+ replacement = content;
351
+ }
352
+ result = result.substring(0, start) + replacement + result.substring(end);
353
+ }
354
+ return result;
355
+ }
320
356
  async function defaultReadline(prompt) {
321
357
  const rl = readline.createInterface({
322
358
  input: process.stdin,
@@ -480,7 +516,7 @@ async function exportTelegramChannel(options) {
480
516
  }
481
517
  }
482
518
  }
483
- const content = message.message || "";
519
+ const content = entitiesToMarkdown(message.message || "", message.entities);
484
520
  const link = channelMeta.username ? `https://t.me/${channelMeta.username}/${msgId}` : "";
485
521
  const post = {
486
522
  msgId,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "koztv-blog-tools",
3
- "version": "1.2.5",
3
+ "version": "1.2.6",
4
4
  "description": "Shared utilities for Telegram-based blog sites",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",