Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DiscordJS Framework - NestJS Discord #16

Open
saenyakorn opened this issue May 17, 2023 · 10 comments
Open

DiscordJS Framework - NestJS Discord #16

saenyakorn opened this issue May 17, 2023 · 10 comments

Comments

@saenyakorn
Copy link
Contributor

I would like to introduce frameworks for implementing Discord bot that is discord-nestjs. It allows us to implement the bot based on NestJS framework which provides greats decorators and separations of layers of logics. We can also implement REST api in it if we want.

@saenyakorn
Copy link
Contributor Author

The another option is https://discordx.js.org/ which has many useful decorators.

@Gusb3ll
Copy link
Contributor

Gusb3ll commented May 17, 2023

Oh yes, I've been looking into discord-nest too. Might consider moving to use the framework kubb 👍

cc @SaltyAom @leomotors

@saenyakorn
Copy link
Contributor Author

I could setup the framework in an hour if you all agreed

@dtinth
Copy link
Collaborator

dtinth commented May 17, 2023

ขอบคุณที่เสนอแนวทางครับ เห็นด้วยว่าถ้ามี structure ดีๆ จะทำให้ต่อยอดได้ง่ายขึ้น

ความเห็นส่วนตัว — เคยใช้ Nest.js มาในปี 2020 ถึง 2022 แล้วส่วนตัวไม่ค่อยชอบเลยครับ เพราะว่า:

  • มันใช้ import syntax แต่ไม่ยอมซัพพอร์ต native ES modules ซะที เวลา import กลับเจอ ERR_REQUIRE_ESM แล้วก็ไม่มีแพลนด้วยว่าจะซัพพอร์ตเมื่อไหร่ — Error [ERR_REQUIRE_ESM]: require() of ES Module (Graphql-Upload) nestjs/nest#11046

  • มันใช้ decorator syntax แบบที่เป็น experimental/legacy อยู่ และไม่ตรงกับมาตรฐาน TC39 — Support ECMAScript decorators (coming in TypeScript 4.8) nestjs/nest#9558

  • ปัจจุบัน การ build/compile/test ที่เร็ว มักจะใช้ swc หรือ esbuild ซึ่ง Nest.js ก็ยังไม่มี first class support ใน Nest.js ซะที — esbuild support nestjs/nest-cli#731

  • เรื่องการเทสต์ Nest.js ยังใช้ Jest เป็นตัวหลักอยู่ ซึ่งในโปรเจคที่ใหญ่ขึ้นมันทำงานค่อนข้างช้า เมื่อเทียบกับ https://vitest.dev/

  • ปัจจุบันคะแนนนิยมของ Nest.js เริ่มหายไป โพล State of JS 2022 ไม่พูดถึง Nest.js แล้ว

โดยรวมรู้สึกว่า JavaScript/TypeScript ecosystem มันพัฒนาจากปี 2020 มาค่อนข้างไกล แต่ Nest.js กลับไม่พัฒนาตาม ถ้าใช้ Nest.js ก็มีโอกาสที่ทำให้ติดแหง็กกับ ecosystem ยุค 2020 หรือไม่ก็ต้องไปใช้พวก 3rd party package ที่ไม่ได้ first-class support โดยทีม Nest และอาจจะพังเมื่อไหร่ก็ได้ จึงไม่ค่อยสนับสนุนเท่าไหร่ครับ ;-;

อีกตัวที่พูดถึงคือ discordx ซึ่งใช้ decorators syntax เหมือนกัน ปัญหาของ decorators syntax คือมันยังไม่เป็น standard ทำให้พวก build tooling เช่น esbuild ไม่ซัพพอร์ตครับ1 มองว่ามีวิธีอื่นๆ ที่จะทำให้โค้ดเป็นระเบียบโดยไม่ต้องใช้ decorators (ดูตัวอย่างได้จากพวก meta-framework เช่น Next.js, Remix, Astro)

p.s. ความเข้าใจของผมอาจจะคลาดเคลื่อนนะครับ ถ้าผิดตรงไหนแย้งได้ผมจะได้เรียนรู้ด้วย

Footnotes

  1. ยกเว้นว่าจะใช้ esbuild-plugin-tsc ซึ่งใช้ tsc ในการคอมไพล์ อาจจะทำให้คอมไพล์ช้า และ esbuild-kit ไม่ซัพพอร์ตการโหลดปลั๊กอินเพิ่ม

@badgooooor
Copy link

badgooooor commented May 18, 2023

The another option is https://discordx.js.org/ which has many useful decorators.

Just have a quick look in this package. I don't see any test script in this one, so I'm not quite sure if we could know if there is any breaking changes that will affect this project in the future e.g. changes from Discord API itself or changes from this library 🥺.

BTW, I agree about having structure for this project which I guess it would come along after couple of features are implemented since code always evolved.

@mildronize
Copy link

@dtinth สอบถามหน่อยครับ ถ้าไม่ใช่ Nest.js มี Alternative ที่น่าสนใจตัวอื่นๆ มั้ยครับ โดยส่วนตัวแอบไม่ชอบ Nest.js หลายอย่างเหมือนกัน

@saenyakorn
Copy link
Contributor Author

ขอบคุณคุณ @dtinth ด้วยนะครับสำหรับข้อมูลและ insights

  • เห็นด้วยเรื่องที่ Nestjs หลายอย่างยังยึดติดกับ syntax เก่าอยู่ครับ ซึ่งอันนี้เป็นเรื่องที่ช่วยไม่ได้จริง ๆ สำหรับ framework ตัวนี้
  • ในส่วนของการ build / compile ตอนนี้มีคนทำ vite-plugin-node มาให้ใช้แล้ว ซึ่งเรา support nestjs adapter ด้วย รวมไปถึงเราสามารถเลือกใช้ complier ได้หลายอย่างด้วย ไม่ว่าจะเป็น esbuild หรือ swc ก็รองรับครับ ดังนั้นเรื่องความเร็วในการ build / compile อาจจะไม่ต้องกังวลมากขนาดนั้นครับ
  • ในส่วนของการ test อันนี้ยังไม่เคยลองใช้ vitest กับ nestjs เหมือนกัน ถ้าใช้ได้ก็ดีเหมือนกันครับ แต่เท่าที่ค้นเร็ว ๆ เหมือนว่าตอนนี้ยังไม่ support ครับ แต่โดยส่วนตัวคิดว่า "ถ้าวันหนึ่ง" Nest JS support ESM module เต็มที่แล้ว อาจจะไม่ยากเท่าไรที่เราจะย้ายจาก jest ไป vitest ครับ
  • สาเหตุที่ Nodejs-based backend framework ไม่ค่อยพัฒนาเท่าไรอาจจะเพราะว่าทุกคนหนีไปเขียนภาษาอื่นกันหมดแล้ว lol แต่คิดว่ายังไงแล้ว Framework ที่น่าจะดีเป็นอันดับต้น ๆ ในโลกของ Nodejs น่าจะยังเป็น NestJs อยู่

โดยรวมเห็นด้วยเรื่องที่ NestJS อาจจะทำให้เราติดแหงกอยู่กับ syntax เก่า ๆ แต่ส่วนตัวคิดว่าตอนนี้สิ่งที่สำคัญคือการหา Framework เพื่อสร้าง standard ในการเขียน Discord bot ให้มีระเบียบก่อน feature ที่หลาย ๆ ท่านเสนอมาจะได้เกิดขึ้นจริง ๆ ได้เร็ว ๆ ครับ ถ้าวันหนี่งเราเจอ Framework / library ก็อาจจะต้องมาคุยกันอีกทีว่าจะย้ายหรือเปล่า (แต่ถ้าเรามี test ที่นัดกุมพอ เรื่องการ migrate ก็อาจจะไม่ได้น่ากลัวขนาดนั้น (?))

หรือถ้าทุกคนมี tool ตัวอื่นก็แนะนำมาได้เลยนะครับ :)

@dtinth
Copy link
Collaborator

dtinth commented May 19, 2023

@mildronize @saenyakorn ตอบสองท่านเลยครับ

เท่าที่ผมดูในยุค modern JavaScript ไม่ค่อยเห็น pure backend framework แล้ว ผมเห็นด้วย แต่เหตุผลสำหรับผมต่างกันครับ:

  • ยุคนี้มักจะมาเป็น Full stack framework เช่น Next.js, Astro, Remix แทน ทำให้ไม่ต้องแบ่งแยก Frontend/Backend อีกต่อไป โดยเฉพาะหลายๆ เจ้าที่เริ่มเอาคอนเซปต์ Filesystem-based routing มาใช้. ลองดู Theo Browne (2022). “Next.js is a backend framework.” ครับ (ปัจจุบันถ้าผมจะขึ้น Backend ผมคงขึ้นด้วย Next.js ถึงจะไม่ได้ใช้ส่วน Frontend เลยก็ตาม หรือไม่ ก็ Fastify ครับ)

  • Modern JavaScript เดี๋ยวนี้มัน modern พอที่จะจัดโค้ดให้เป็นระเบียบโดยไม่ต้องพึ่ง framework แล้วครับ แถม TypeScript มันมี code actions และยังซัพพอร์ต Evolutionary architecture ได้ดีกว่าการมี Framework มากำกับแล้วทำให้ขยับ Architecture ทีหลังยาก

  • จริงๆ เครื่องมือฝั่ง Backend ในโลก Node ก็ยังมีอยู่เหมือนกันครับ แต่จะไม่ได้แบบครอบทั้งแอพอีกต่อไป แต่จะครอบแค่บางส่วนของตัวระบบ เช่น tRPC กับ Prisma

  • “Framework ที่น่าจะดีเป็นอันดับต้น ๆ ในโลกของ Nodejs น่าจะยังเป็น NestJs อยู่” เรื่องนี้ผมไม่เห็นด้วย เพราะถ้าเป็นแบบนั้น ควรจะยังคงมีชื่อ Nest.js อยู่ State of JS 2022 และ StackOverflow Developer Survey 2022 แต่ของปีล่าสุดไม่พูดถึง Nest.js เลยครับ

Disclaimer: เรื่อง Nest.js อย่าเชื่อความเห็นผมมาก ผมคิดว่าผมน่าจะ bias มากๆ เพราะผมหัวเสียกับมันมาพอสมควรครับ ผมเคยเปิด Issue เรื่อง ESM ตั้งแต่ปี 2021 มาปี 2023 แล้วก็ยังไม่มีอัพเดตอะไรเลย ผมเลยเลิกหวังกับคำว่า “ถ้าวันหนึ่ง” กับ Nest.js แล้วครับบ 😂

วันคุยกับ @heypoom ที่เป็น VP of Engineering เขาบอกว่า หลายๆ คนจะชอบ Nest.js ถ้าในทีมไม่มีคนที่มาคอยช่วย Evolve architecture ก็ให้ Nest.js มาทำหน้าที่เป็น Architect ให้แทน ถึง dev Node.js หลายๆ คนอาจจะไม่ชอบ แต่อย่างน้่อยก็ดูมีทิศทาง แต่เท่าที่สังเกตจากคนที่มา Contribute มีหลายคนที่มี Sense of architecture มาช่วยปรับ Architecture อยู่เรื่อยๆ เรื่องนี้ผมเลยหายห่วงครับ ตัวอย่าง PR ที่เข้ามาก็เช่น

เลยอยากเชียร์ให้ลองไปแบบไม่ต้องใช่้ Framework ไปก่อนครับ แล้วดูว่ามันมีปัญหาเรื่อง Architecture เยอะไหม

ผมเคย Deal กับโค้ดเบส Node.js ที่เละๆ มาเหมือนกันครับบ ซึ่งผม agree ว่าเทียบกับ maintain codebase เละๆ แบบนั้น สู้ maintain Nest.js codebase ดีกว่า 55555

ส่วนตัวมองว่าถ้า codebase เริ่มหลงทาง ก็น่าจะ migrate ไป Nest.js ได้นะครับ ส่วนตัวไม่ติดอะไร คิดว่า dev หลายๆ คนก็น่าจะอยู่กับมันได้เช่นกัน (แค่ส่วนตัวความสนุกของการเขียนโค้ดมันจะลดลงไปหน่อย)

@saenyakorn
Copy link
Contributor Author

อันนี้แค่ FYI เฉย ๆ นะครับ อันนี้เป็น discord bot ที่ผมเขียนไว้เมื่อนานมาแล้ว ด้วย discord-nestjs ชื่อ paradis-bot เผื่อเอาไว้เป็นข้อมูลประกอบการตัดสินใจของหลาย ๆ คน ตัวอย่าง command เช่น ping command

ส่วนเหตุผลที่คุณ @dtinth ยกมาอันนี้อาจจะเห็นต่างนิดนึงเรื่องการใช้ Full stack framework เช่น NextJS, หรือ Remix มาใช้เฉพาะส่วน backend อย่างเดียว ส่วนตัวรู้สึกว่าเหมือนเราหยิบของที่ทรงพลังมากแต่ใช้งานมันนิดเดียวทำให้รู้สึกว่าเหมือนใช้งานมันได้ไม่เต็มที่เท่าไร (ซึ่งอันนี้ผมอาจจะ bias เองก็ได้ lol)

ถ้าอย่างงั้นเราไป way maintain architecture เองไปก่อนแล้วถ้า codebase มีปัญหายังไง อาจจะค่อยหยิบเรื่องนี้มาคุยกันอีกทีละกันนะครับ

หรือ dev ท่านอื่น ๆ มีความเห็นว่าอย่างไรบ้างครับ?

@dtinth
Copy link
Collaborator

dtinth commented May 19, 2023

@saenyakorn ดีเลยครับ มีตัวอย่างให้ reference และศึกษาเยอะๆ ขอบคุณที่แชร์ครับ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants