Skip to content

Commit ef79d26

Browse files
committed
chore: more customization (closes #125)
1 parent e4f6ea0 commit ef79d26

File tree

14 files changed

+109
-57
lines changed

14 files changed

+109
-57
lines changed

CONFIG_FIELDS.md

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
[Заполненный пример config.json](https://github.com/MrZillaGold/VK2Discord/blob/master/config_example.json)
66

77

8-
**VK**
8+
### VK
99

1010
| Поле | Пример заполнения | Описание |
1111
| ----------------- | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -18,14 +18,35 @@
1818
| `donut` | `false` | Публиковать записи доступные по подписке [VKDonut](https://vk.com/blog/vk-donut). |
1919
| `interval` | `30` | Интервал получения новых постов из ВКонтакте в секундах. Используется для ключа-доступа пользователя. |
2020

21-
**Discord**
22-
23-
| Поле | Пример заполнения | Описание |
24-
| -------------- | -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
25-
| `webhook_urls` | `["https://discordapp.com/api/webhooks/1", "https://discordapp.com/api/webhooks/2"]` | WebHook-ссылки, можно использовать несколько ссылок на разные каналы Discord. |
26-
| `color` | `"#aabbcc"` | Цвет рамки сообщения Discord в формате [HEX](https://www.color-hex.com/). |
27-
| `username` | `"VK2Discord"` | Имя для Webhook, показывается в качестве имени бота. (Строку можно оставить пустой, если не хотите менять Webhook имя) |
28-
| `avatar_url` | `"https://sun9-29.userapi.com/rmoNl3t2KfRZlNpFbAwSEzeDwML-xczsHU6y1A/HApWIpxjkT4.jpg"` | Ссылка на аватар Webhook, показывается в качестве аватарки бота. (Строку можно оставить пустой, если не хотите менять Webhook аватар) |
29-
| `content` | `"Новая запись! @everyone"` | Сообщение которое добавляется перед отправкой, можно использовать для упоминаний. |
30-
| `author` | `false` | Указывать автора записи ВКонтакте (если имеется) в сообщении Discord. |
31-
| `copyright` | `true` | Указывать источник записи ВКонтакте и подпись автора (если имеется) в сообщении Discord. |
21+
### Discord
22+
23+
| Поле | Пример заполнения | Описание |
24+
| ----------------- | -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
25+
| `webhook_urls` | `["https://discordapp.com/api/webhooks/1", "https://discordapp.com/api/webhooks/2"]` | WebHook-ссылки, можно использовать несколько ссылок на разные каналы Discord. |
26+
| `color` | `"#aabbcc"` | Цвет рамки сообщения Discord в формате [HEX](https://www.color-hex.com/). |
27+
| `username` | `"VK2Discord"` | Имя для Webhook, показывается в качестве имени бота. (Строку можно оставить пустой, если не хотите менять Webhook имя) |
28+
| `avatar_url` | `"https://sun9-29.userapi.com/rmoNl3t2KfRZlNpFbAwSEzeDwML-xczsHU6y1A/HApWIpxjkT4.jpg"` | Ссылка на аватар Webhook, используется в качестве аватарки бота. (Строку можно оставить пустой, если не хотите менять Webhook аватар) |
29+
| `content` | `"Новая запись! @everyone"` | Сообщение которое добавляется перед отправкой, можно использовать для упоминаний. |
30+
| `author` | `false` | Указывать автора записи ВКонтакте (если имеется) в сообщении Discord. |
31+
| `copyright` | `true` | Указывать источник записи ВКонтакте и подпись автора (если имеется) в сообщении Discord. |
32+
| `date` | `true` | Добавлять дату публикации записи ВКонтакте в сообщении Discord. |
33+
| `exclude_content` | `["photo", "text", "video"]` | Массив с типами контента для исключения из сообщения Discord. [Доступные значения](#доступный-контент-для-исключения). |
34+
35+
#### Доступный контент для исключения
36+
37+
| Тип | Описание |
38+
| --------------------- | ------------------------ |
39+
| `audio` | Аудиозапись |
40+
| `doc` | Документ |
41+
| `link` | Сниппет-ссылка |
42+
| `photo` | Фотография |
43+
| `poll` | Опрос |
44+
| `video` | Видео |
45+
| `album` | Альбом |
46+
| `market` | Товар |
47+
| `market_album` | Подборка товаров |
48+
| `textlive` | Тестовая трансляция |
49+
| `text` | Текст записи |
50+
| `attachments` | Вложения записи |
51+
| `repost_text` | Текст репоста |
52+
| `repost_attachments` | Вложения репоста |

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<img alt="Docker Pulls" src="https://img.shields.io/docker/pulls/mrzillagold/vk2discord?label=%D0%97%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8%20Docker&logo=docker">
1414
</a>
1515
<a href="https://wakatime.com/badge/github/MrZillaGold/VK2Discord">
16-
<img alt="Docker Pulls" src="https://wakatime.com/badge/github/MrZillaGold/VK2Discord.svg">
16+
<img alt="wakatime" src="https://wakatime.com/badge/github/MrZillaGold/VK2Discord.svg">
1717
</a>
1818
<a href="https://github.com/MrZillaGold/VK2Discord/actions/workflows/ci.yml">
1919
<img alt="Build Status" src="https://github.com/MrZillaGold/VK2Discord/actions/workflows/ci.yml/badge.svg">

config.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,11 @@
2020
"content": "",
2121
"color": "#aabbcc",
2222
"author": true,
23-
"copyright": true
23+
"copyright": true,
24+
"date": true,
25+
"exclude_content": []
2426
}
2527
}
2628
],
27-
"version_dont_modify_me": 4
29+
"version_dont_modify_me": 5
2830
}

config_example.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020
"content": "@everyone",
2121
"color": "#aabbcc",
2222
"author": true,
23-
"copyright": false
23+
"copyright": false,
24+
"date": false
2425
}
2526
},
2627
{
@@ -45,7 +46,8 @@
4546
"content": "",
4647
"color": "#ffbbff",
4748
"author": true,
48-
"copyright": true
49+
"copyright": true,
50+
"date": true
4951
}
5052
}
5153
],

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "vk2discord",
3-
"version": "2.1.8",
4-
"LATEST_CONFIG_VERSION": 4,
3+
"version": "3.0.0",
4+
"LATEST_CONFIG_VERSION": 5,
55
"description": "Автоматическая публикация записей из группы или профиля ВКонтакте в канал Discord.",
66
"main": "./build/index.js",
77
"type": "module",

scripts/check.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,9 @@ function createConfig() {
6868
content: '',
6969
color: '#aabbcc',
7070
author: true,
71-
copyright: true
71+
copyright: true,
72+
date: true,
73+
exclude_content: []
7274
}
7375
}
7476
],

scripts/update.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ const { clusters, version_dont_modify_me } = config;
1010
const changes = new Map([
1111
[2, [{}, { author: true, copyright: true }]],
1212
[3, [{}, { content: '', username: '', avatar_url: '' }]],
13-
[4, [{ donut: false, ads: false, words_blacklist: [] }, {}]]
13+
[4, [{ donut: false, ads: false, words_blacklist: [] }, {}]],
14+
[5, [{}, { date: true, exclude_content: [] }]]
1415
]);
1516

1617
if (!clusters || !version_dont_modify_me) {

src/index.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { HexColorString } from 'discord.js';
22

3-
import { Handler, Storage, VK } from './modules';
3+
import { AttachmentTypeUnion, Handler, Storage, VK } from './modules';
44

55
// @ts-ignore
66
import config from '../config.json';
@@ -22,6 +22,13 @@ export interface IVKParams {
2222
interval: number;
2323
}
2424

25+
export enum Exclude {
26+
TEXT = 'text',
27+
ATTACHMENTS = 'attachments',
28+
REPOST_TEXT = 'repost_text',
29+
REPOST_ATTACHMENTS = 'repost_attachments'
30+
}
31+
2532
export interface IDiscordParams {
2633
webhook_urls: string[];
2734
username: string;
@@ -30,6 +37,8 @@ export interface IDiscordParams {
3037
color: HexColorString;
3138
author: boolean;
3239
copyright: boolean;
40+
date: boolean;
41+
exclude_content: (AttachmentTypeUnion | Exclude)[];
3342
}
3443

3544
export interface ICluster {

src/modules/Attachments.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import { MessageEmbed, MessageAttachment } from 'discord.js';
22
import { AttachmentType, ISharedAttachmentPayload, AttachmentTypeString } from 'vk-io';
33

4-
import { VK, Message } from './';
4+
import { Message } from './';
5+
import { ICluster } from '../';
56

67
import { generateRandomString, LINK_PREFIX } from '../utils';
78

8-
type AttachmentTypeUnion = AttachmentTypeString | 'textlive';
9+
export type AttachmentTypeUnion = AttachmentTypeString | 'textlive';
910

1011
export type Attachment = {
1112
type: AttachmentTypeUnion;
@@ -17,13 +18,14 @@ const { AUDIO, DOCUMENT, LINK, PHOTO, POLL, VIDEO, ALBUM, MARKET, MARKET_ALBUM }
1718

1819
export class Attachments {
1920

20-
VK: VK;
21+
private cluster: ICluster;
2122

22-
constructor(VK: VK) {
23-
this.VK = VK;
23+
constructor(cluster: Attachments['cluster']) {
24+
this.cluster = cluster;
2425
}
2526

2627
parse(attachments: Attachment[], embeds: Message['embeds'], files: Message['files']): string[] {
28+
const { discord: { exclude_content } } = this.cluster;
2729
const [embed] = embeds;
2830

2931
const attachmentFields: string[] = [];
@@ -39,6 +41,10 @@ export class Attachments {
3941
.reduce<string[]>((parsedAttachments, {
4042
type, photo, video, link, doc, audio, poll, album, textlive, market
4143
}) => {
44+
if (exclude_content.includes(type)) {
45+
return parsedAttachments;
46+
}
47+
4248
switch (type) {
4349
case PHOTO: {
4450
const { sizes } = photo;

0 commit comments

Comments
 (0)