diff --git a/apps/frontend/src/components/launches/providers/x/x.provider.tsx b/apps/frontend/src/components/launches/providers/x/x.provider.tsx
index 6601c82f..28515733 100644
--- a/apps/frontend/src/components/launches/providers/x/x.provider.tsx
+++ b/apps/frontend/src/components/launches/providers/x/x.provider.tsx
@@ -3,6 +3,8 @@ import { ThreadFinisher } from '@gitroom/frontend/components/launches/finisher/t
import { Select } from '@gitroom/react/form/select';
import { useT } from '@gitroom/react/translation/get.transation.service.client';
import { useSettings } from '@gitroom/frontend/components/launches/helpers/use.values';
+import { XDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/x.dto';
+import { Input } from '@gitroom/react/form/input';
const whoCanReply = [
{
@@ -48,6 +50,8 @@ const SettingsComponent = () => {
))}
+
+
>
);
@@ -56,7 +60,7 @@ const SettingsComponent = () => {
export default withProvider(
SettingsComponent,
undefined,
- undefined,
+ XDto,
async (posts) => {
if (posts.some((p) => p.length > 4)) {
return 'There can be maximum 4 pictures in a post.';
diff --git a/libraries/nestjs-libraries/src/dtos/posts/create.post.dto.ts b/libraries/nestjs-libraries/src/dtos/posts/create.post.dto.ts
index 4f93246f..4a0cc5c7 100644
--- a/libraries/nestjs-libraries/src/dtos/posts/create.post.dto.ts
+++ b/libraries/nestjs-libraries/src/dtos/posts/create.post.dto.ts
@@ -26,6 +26,7 @@ import { TikTokDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settin
import { DiscordDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/discord.dto';
import { SlackDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/slack.dto';
import { LemmySettingsDto } from '@gitroom/nestjs-libraries/dtos/posts/lemmy.dto';
+import { XDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/x.dto';
export class EmptySettings {}
export class Integration {
@@ -85,6 +86,7 @@ export class Post {
{ value: TikTokDto, name: 'tiktok' },
{ value: DiscordDto, name: 'discord' },
{ value: SlackDto, name: 'slack' },
+ { value: XDto, name: 'x' },
],
},
})
diff --git a/libraries/nestjs-libraries/src/dtos/posts/providers-settings/all.providers.settings.ts b/libraries/nestjs-libraries/src/dtos/posts/providers-settings/all.providers.settings.ts
index 2f6ad04c..9c1724a5 100644
--- a/libraries/nestjs-libraries/src/dtos/posts/providers-settings/all.providers.settings.ts
+++ b/libraries/nestjs-libraries/src/dtos/posts/providers-settings/all.providers.settings.ts
@@ -5,6 +5,7 @@ import { RedditSettingsDto } from '@gitroom/nestjs-libraries/dtos/posts/provider
import { PinterestSettingsDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/pinterest.dto';
import { YoutubeSettingsDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/youtube.settings.dto';
import { TikTokDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/tiktok.dto';
+import { XDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/x.dto';
export type AllProvidersSettings =
| DevToSettingsDto
@@ -13,4 +14,5 @@ export type AllProvidersSettings =
| RedditSettingsDto
| YoutubeSettingsDto
| PinterestSettingsDto
+ | XDto
| TikTokDto;
diff --git a/libraries/nestjs-libraries/src/dtos/posts/providers-settings/x.dto.ts b/libraries/nestjs-libraries/src/dtos/posts/providers-settings/x.dto.ts
new file mode 100644
index 00000000..4677a1ce
--- /dev/null
+++ b/libraries/nestjs-libraries/src/dtos/posts/providers-settings/x.dto.ts
@@ -0,0 +1,9 @@
+import { IsOptional, Matches } from 'class-validator';
+
+export class XDto {
+ @IsOptional()
+ @Matches(/^(https:\/\/x\.com\/i\/communities\/\d+)?$/, {
+ message: 'Invalid X community URL. It should be in the format: https://x.com/i/communities/1493446837214187523',
+ })
+ community: string;
+}
diff --git a/libraries/nestjs-libraries/src/integrations/social/x.provider.ts b/libraries/nestjs-libraries/src/integrations/social/x.provider.ts
index 67891ab5..a3b8df2c 100644
--- a/libraries/nestjs-libraries/src/integrations/social/x.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/x.provider.ts
@@ -241,6 +241,7 @@ export class XProvider extends SocialAbstract implements SocialProvider {
postDetails: PostDetails<{
active_thread_finisher: boolean;
thread_finisher: string;
+ community?: string;
who_can_reply_post:
| 'everyone'
| 'following'
@@ -311,6 +312,12 @@ export class XProvider extends SocialAbstract implements SocialProvider {
: {
reply_settings: postDetails?.[0]?.settings?.who_can_reply_post,
}),
+ ...(postDetails?.[0]?.settings?.community
+ ? {
+ community_id:
+ postDetails?.[0]?.settings?.community?.split('/').pop() || '',
+ }
+ : {}),
text: post.message,
...(media_ids.length ? { media: { media_ids } } : {}),
...(ids.length