از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
راهنمای ایجاد ربات Discord در جاوا اسکریپت با Discord.js v13 برقراری ارتباط آنلاین و برقراری ارتباط با مردم در سرتاسر جهان یک وعده اصلی از آغاز ظهور اینترنت – یک وب از ارتباطات و اطلاعات بوده است. نسبتا زود روی، برنامه هایی به وجود آمدند که مردم را در سراسر جهان به هم متصل می کردند و به آنها اجازه می دادند پیام ارسال کنند، چند رسانه ای و …
سرفصلهای مطلب
معرفی
برقراری ارتباط آنلاین و برقراری ارتباط با مردم در سرتاسر جهان یک وعده اصلی از آغاز ظهور اینترنت – شبکه ای از ارتباطات و اطلاعات – بوده است. نسبتا زود روی، برنامه هایی به وجود آمدند که مردم را در سراسر جهان به هم متصل می کردند و به آنها امکان می داد پیام ارسال کنند، چند رسانه ای، برقراری تماس های ویدیویی و صوتی زنده انجام دهند و امکان برقراری ارتباط بین المللی در قالبی تعاملی و جذاب تر از تماس های تلفنی را فراهم می کرد.
همهگیری 2020 نیاز به کار از راه دور و برقراری ارتباط آنلاین با دوستان و خانواده را بیشتر کرد. سرویسهای ارتباطی که در آن زمان به خوبی تثبیت شده بودند، شاهد موج جدیدی از کاربران و برنامههایی مانند زوم، تیمهای گوگل، اسکایپ، دیسکورد و وبکس بودند.
اختلاف نظر برنامه ای است که ما روی آن تمرکز خواهیم کرد روی در این راهنما از سال 2021، این یکی از محبوب ترین پلتفرم های ارتباطی است که برای تسهیل جوامع کاربران در سرورها، به اشتراک گذاری متن، صدا و ویدئو و همچنین پخش زنده در کانال ها استفاده می شود.
چیزی که Discord را متمایز میکند این است که به راحتی میتوان آن را با موضوعات و جوامع خاص، با نقشها، مجوزها و کانالهای سفارشی تطبیق داد، که به کاربران اجازه میدهد تا با سرورهای داده شده به روشی منحصربهفرد تعامل داشته باشند – بیش از یک چت گروهی.
توجه داشته باشید: در قلب این قابلیت سفارشیسازی، رباتهای Discord هستند که میتوانند برای واکنش به پیامها، واکنشها یا انجام کارها به صورت دورهای تنظیم شوند و به مدیران سرور اجازه میدهند ساختار بدهند و پروتکلهای رفتاری ایجاد کنند.
ایجاد رباتها نسبتاً آسان است و میتوان آن را در زبانهای مختلف انجام داد – مانند C#، Java، Go، Lua، NodeJS، PHP، Python و Rubyو در این راهنما، روش ایجاد ربات Discord در جاوا اسکریپت، و همچنین روش واکنش ربات به پیام ها با پاسخ های خاص خود، مدیریت دستورات سفارشی و روش تغییر حضور ربات را بررسی خواهیم کرد.
ربات های Discord مبتنی هستند روی یک معماری رویداد محور، که با توجه به ماهیت پلتفرمی که در حال اجرا هستند طبیعی است روی.
قبل از فرو رفتن در خود ربات، اگر با اصطلاحات استفاده شده در Discord آشنا نیستید – نگاهی به اصول اولیه خواهیم انداخت.
مبانی اختلاف
چیزی که به عنوان یک برنامه مبتنی بر گیمر شروع شد، امروزه به یک برنامه کاربردی عمومی برای ارتباطات تبدیل شده است. همانطور که قبلا ذکر شد، Discord یکی از محبوب ترین برنامه های ارتباطی است روی وب.
مانند اکثر برنامه های کاربردی از این نوع، گزینه هایی برای ارتباط متنی، صوتی و تصویری دارد و همچنین کاملا رایگان است. در حالی که یک-روی-یک ارتباط در دسترس است، جذابیت اصلی Discord آن است سرورها، که می تواند به عنوان چت های گروهی ساده عمل کند، اما می تواند به اجتماعات هزاران نفری تبدیل شود.
- سرورهای Discord
شما می توانید سرور Discord را به عنوان یک خانه بزرگ متشکل از چندین اتاق در نظر بگیرید. این اتاق ها را می توان به دو دسته تقسیم کرد متن و کانال های صوتی. اگر می خواهید برخی از محبوب ترین سرورها را بررسی کنید، می توانید از خدماتی استفاده کنید که سرورها و آنها را فهرست می کنند دعوت لینک ها روی وب سایت هایی مانند Top.gg.
یک فرد از طریق یک سرور وارد سرور می شود لینک دعوت که می تواند باشد دائمی (هر کسی که آن را داشته باشد می تواند تا زمانی که سرور در دسترس است بپیوندد) موقت (هر کس می تواند در یک بازه زمانی مشخص بپیوندد) یا محدود به افراد خاص علاوه بر این، بر اساس روی با مجوز کاربر، آنها ممکن است پیوندهای دعوت ایجاد کنند یا نکنند – و این اغلب از طریق ربات ها خودکار می شود.
- کانال های Discord
اگر سرور یک خانه باشد، یک کانال Discord یک اتاق در آن خانه است. از کانال ها برای سازماندهی موضوعات بحث استفاده می شود – مانند یک محل کار دارای یک کانال بازاریابی، کانال توسعه و الف کانال میم.
کانالهای متنی به کاربران امکان ارسال متن، فایلهای ویدئویی و تصاویر را میدهند و میتوانید چند رسانهای را ممنوع کنید و فقط متن را اجبار کنید و برعکس (میتوانید پیامهای متنی را حذف کنید و فقط تصاویر را اعمال کنید) از طریق رباتها.
کانال های صوتی صرف نظر از حضور کاربر در کانال های متنی دیگر فقط برای ارتباط صوتی استفاده می شوند. کاربر می تواند در یک کانال صوتی با سایر کاربران صحبت کند و پیام ها را در یک کانال متنی جداگانه تایپ کند یا یک ویدیو را در کانال صوتی پخش کند.
علاوه بر این، یک کاربر تنها در صورتی میتواند وارد کانال شود که مجوز او اجازه دهد. بهطور پیشفرض، همه میتوانند وارد هر کانالی شوند، اما از طریق مجوز مبتنی بر نقش، میتوانید کانالها را از افراد دارای نقشهای خاص مخفی کنید.
- ربات Discord
ربات Discord برنامهای است که برای خودکار کردن وظایف خاص یا تعدیل رفتار قابل پیشبینی نوشته شده است. به عنوان مثال، میتوانید از یک ربات برای شناسایی زبان ناپسند و حذف پیامهایی که حاوی آن هستند استفاده کنید.
ربات های Discord در نهایت کاربران هستند.
هر کاری که یک کاربر می تواند انجام دهد، یک ربات می تواند انجام دهد – سریعتر و شبانه روزی. به طور معمول، به رباتها مجوز سوپرادمین داده میشود، بنابراین میتوانند ضربه بزنند، ممنوع کنند، دعوت ایجاد کنند، پیامها را حذف کنند، نقشها را تعیین کنند، و غیره. آنها معمولاً برای هماهنگی و نگهداری سرورها در زمانی که ناظران و مدیران کاربر در اطراف نیستند و همچنین برای رسیدگی به موارد زیر استفاده میشوند. وظایف
بسیاری از رباتهای عمومی وجود دارند که منبع باز هستند و به عنوان رباتهای هدف عمومی عالی عمل میکنند! برخی از آنها حتی دارای APIهایی هستند که می توانید با آنها سر و کار داشته باشید، و همچنین رابط های کاربری وب که به شما امکان می دهد آنها را مطابق میل خود سفارشی کنید تا جو معمولی بتواند بدون هیچ دانش کدنویسی یک ربات ایجاد کند.
در حالی که اینها به خوبی کار می کنند، مشابه ایجاد یک وب سایت با خدماتی مانند وردپرس است – ممکن است بخواهید آن را از ابتدا بسازید. خودت بجای.
همانطور که گفته شد، بیایید پیش برویم و یک کاربر Discord Bot ایجاد کنیم که ما آن را خودکار می کنیم.
ایجاد کاربر Discord Bot
رباتها در نهایت کاربران هستند، اما باید رباتهای شفاف باشند. آنها از یک هستند نوع کاربر و مردم روی سرور می داند که یک ربات یک ربات است. برای ایجاد یک ربات و جلوگیری از سوء استفاده و سوء استفاده – باید آن را از طریق پورتال توسعه دهنده Discord ثبت کنید:
discord.com/developers/applications
این page به عنوان داشبورد برای همه برنامه هایی که می نویسید عمل می کند:
وقتی که page بارگذاری می شود، در گوشه بالا سمت راست یک دکمه بنفش رنگ را می بینید – برنامه جدید.
از شما خواسته می شود که یک نام برای ربات خود وارد کنید. در این راهنما، ما آن را فراخوانی خواهیم کرد test-bot
از آنجایی که این یک ربات ساده است، اما می توانید خلاقیت بیشتری داشته باشید! این ربات هر بار که شخصی به آن ملحق می شود پیام خوش آمدگویی ارسال می کند، که استفاده بسیار معمولی برای یک ربات در یک جامعه است. علاوه بر این، به پیامهای خاص حاوی زبان نامناسب واکنش نشان میدهد، به افرادی که آن را درخواست میکنند واکنش نشان میدهد، و همچنین دستورات کاربران را کنترل میکند.
بیایید یک نام برای ربات وارد کنیم:
وقتی کلیک می کنید ایجاد کردن، به تنظیمات برنامه هدایت می شوید. ما تمرکز خواهیم کرد روی را ربات و OAuth2 زبانه ها را حضور غنی تب برای ادغام Discord در بازی ها استفاده می شود (می تواند توسط توسعه دهندگان بازی برای در هم تنیدن ویژگی ها استفاده شود) و آزمایش کنندگان برنامه برگه برای دعوت از آزمایشکنندگان برای آزمایش برنامه شما استفاده میشود. این یک ویژگی مفید است اگر ربات شما دارای قدرت سوپرادمین باشد و در مورد انتشار آن قبل از آزمایش آن شک دارید.
اولین تب مفید برای ما ربات برگه در اینجا می توانید یک ربات بسازید، عکس پروفایل، نام آن را تغییر دهید و a را تنظیم کنید نشانه.
توجه داشته باشید: آ نشانه عملا یک رمز عبور برای ربات شما است. بهتر است آن را برای کسی فاش نکنید، زیرا می توان از آن برای دستکاری ربات به گونه ای استفاده کرد که به سرور Discord شما آسیب برساند.
هر برنامه باید مجوز داشته باشد و Discord از OAuth2 برای مجوز استفاده می کند – استاندارد صنعتی. زیر برگه OAuth2، می توانیم محدوده هایی را برای برنامه ها انتخاب کنیم، و از آنجایی که یک ربات ایجاد کرده ایم، کادر کنار bot
محدوده. بلافاصله پس از بررسی آن، یک برگه دیگر تماس گرفت مجوزهای ربات باید در زیر ظاهر شود محدوده ها.
در اینجا تمام مجوزهایی که ربات خواهد داشت را تنظیم می کنیم. از آنجایی که ما در حال ساخت رباتی هستیم که بیشتر پیامک ارسال می کند، این تنها قسمتی است که برای ما جالب است:
توجه داشته باشید: شاید متوجه شده باشید که تنها مجوز عمومی ما تنظیم کردیم مشاهده کانال ها – زیرا ربات به مجوز انتقال از کانالی به کانال دیگر برای تعامل با کاربران نیاز دارد.
همانطور که مجوزها را انتخاب می کنید، مولد URL OAuth2 گزینه های شما را با یک گزینه منحصر به فرد اضافه می کند client_id
زنده. پس از انتخاب همه گزینههایی که میخواهید در ربات اعمال شوند، لینک را کپی کرده و دنبال کنید. پس از انجام این کار – از شما خواسته می شود سروری را انتخاب کنید که ربات را به آن اضافه کنید.
پس از انتخاب سرور و تأیید اینکه شما ربات نیستید، یک ربات باید در لیست ربات ظاهر شود. ربات تا زمانی که کدگذاری نشده باشد در چت به صورت آفلاین ظاهر می شود، بنابراین هنوز نیازی به وحشت در مورد مجوزهای آن نیست، حتی اگر آن را کدنویسی نکرده باشید.
برنامه نویسی ربات Discord در Node.js
با راه اندازی یک کاربر ربات، می توانیم جلو برویم و در واقع آن را کدگذاری کنیم!
در حال نصب Discord.js
برای کدنویسی ربات، از SDK Discord استفاده خواهیم کرد – Discord.js
. برای دانلود از طریق NPM در دسترس است:
$ npm install discord.js
پس از نصب، ما آماده حرکت هستیم! بیایید یک پوشه برای پروژه ایجاد کنیم و یک پروژه Node خالی را در آن مقداردهی کنیم:
$ mkdir discord_bot
$ cd discord_bot
$ npm init
میتوانید هنگام نمونهسازی پروژه، تمام گزینههای پیشفرض را رها کنید یا برخی از گزینههای خود را تنظیم کنید.
یادداشت مهم: برای استفاده از ماژول Discord.js، باید Node 16.x+ را نصب کرده باشید روی سیستم شما در غیر این صورت، الف missing module 'node:events'
خطا مطرح خواهد شد.
درک اهداف ربات
اهداف ربات احتمالاً مهمترین مفهومی است که باید درک کنید تا بتوانید ربات خود را به درستی مدیریت کنید. مقاصد ربات گروهی از رویدادها هستند که ربات به آنها واکنش نشان می دهد. آنها خود را دارند FLAGS
که می تواند به منظور تعیین دقیق رویدادهایی که می خواهیم ربات ما به آن واکنش نشان دهد تنظیم شود.
اگر آنها را به درستی تعریف نکنید، ربات شما به سادگی واکنشی نشان نخواهد داد، حتی اگر کد مناسبی داشته باشید.
Intent ها هنگام مقداردهی اولیه ربات به عنوان یک آرایه ارسال می شوند که کمی بعد خواهیم دید. در حال حاضر، نحو را در نظر داشته باشید:
Intents.FLAGS.INTENT_NAME
ماکرو INTENT_NAME
تنها بخشی است که وقتی میخواهیم مقاصد مختلف اضافه کنیم، آن را تغییر خواهیم داد. برای اینکه ربات به مقاصد واکنش نشان دهد، به آدرس بروید ربات برگه در داشبورد برنامه نویس. زیر مقاصد دروازه ممتاز، دور زدن روی قصد حضور و هدف اعضای سرور.
بیایید به برخی از اهداف تعریف شده در مستندات Discord.js نگاه کنیم:
GUILDS
– به هر رویدادی که حاوی الف باشد واکنش نشان می دهد ایجاد کردن یا حذف عمل – مانندmessageCreate
.GUILD_MEMBERS
– به رویدادهایی مانند اضافه کردن، به روز رسانی و حذف یک کاربر جدید به سرور.GUILD_MESSAGES
– به رویدادهایی مانند ارسال پیام، ویرایش پیام و حذف پیام.GUILD_MESSAGE_REACTIONS
– به رویدادهایی مانندAdding or removing a reaction to a message
.
ممکن است تعجب کنید که a چیست؟ انجمن صنفی یکدفعه؟ فقط یک نام دیگر برای یک سرور. بر اساس پورتال توسعه دهندگان:
Guilds in Discord مجموعه ای مجزا از کاربران و کانال ها را نشان می دهد و اغلب در UI به آنها “سرور” می گویند.
آبرومند وجود دارد فهرست مقاصدبا این حال، شما معمولاً فقط از تعداد کمی برای بیشتر کارهای اساسی استفاده خواهید کرد.
راه اندازی یک ربات Discord
اولین اقدامی که یک ربات می تواند انجام دهد، آنلاین بودن است. به عنوان مثال، این یک عمل غیرفعال است و میتوان آن را برنامهریزی کرد که در زمانهای خاصی از روز آنلاین باشد. در حال حاضر، اجازه دهید ربات آنلاین باشد روی سرور.
در ربات برگه داشبورد، رمز ربات خود را کپی کنید – این نشانه استفاده می شود روی سمت مشتری برای احراز هویت. سپس، در index.js
فایل پروژه Node شما، اجازه دهید import Discord.js SDK، اهداف ربات را تعریف کرده و آن را به صورت آنلاین تنظیم کنید:
const {
Client,
Intents
} = require('discord.js');
const bot = new Client({
intents: (Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MEMBERS, Intents.FLAGS.GUILD_MESSAGES)
});
bot.روی('ready', () => {
console.log(`Bot ${bot.user.tag} is logged in!`);
});
bot.login('YOUR_BOT_TOKEN'); // Replace the macro with your token
در اینجا، ما فقط a را مقداردهی اولیه می کنیم Client
شی، که رابط اصلی برای تعامل با APIهای Discord است. را Client
است ربات هنگام مقداردهی اولیه، از آرایه intent عبور می کنیم.
بیایید به بخش دیگر کد نگاه کنیم:
bot.روی('ready', () => {
console.log(`Bot ${bot.user.tag} is logged in!`);
});
باز هم، رباتهای Discord مبتنی هستند روی یک معماری رویداد محور. را Client
هست یک EventEmitter
و ما می توانیم به رویدادهای منتشر شده گوش دهیم و به آنها واکنش نشان دهیم.
اگر میخواهید درباره معماریهای رویداد محور و مدیریت رویدادها با Node اطلاعات بیشتری کسب کنید – راهنمای ما برای مدیریت رویدادها در Node.js با EventEmitter را بخوانید!
در این مورد، ما در حال گوش دادن به ready
رویداد، و روی()
در آن رویداد، ما وارد سیستم میشویم که ربات وارد شده است. این نیاز به دانش پیشنیاز از زمان ارسال رویدادها دارد – برای مثال، یک پیام ارسال میکند. ready
رویداد زمانی که یک مشتری وارد می شود user
موضوع از Client
کاربر Discord را نشان می دهد که ربات واقعاً همان است.
را login()
متد، با توجه به نشانه ربات، ربات را وارد کرده و این رویداد را منتشر می کند روی()
سپس شنونده، پیام را ثبت می کند. ادامه دهید و اسکریپت را اجرا کنید و آنلاین شدن ربات را مشاهده کنید روی سرور:
$ node index.js
Bot (BOT-NAME) is logged in!
عالی! آنلاین است و به سیستم وارد شده است. بیایید شنونده رویداد دیگری را اضافه کنیم تا هنگام ملحق شدن کاربران، پیام خوشامدگویی ارسال کنیم.
پیام های خوش آمدگویی را به یک کانال ارسال کنید
یک کار کلاسیک برای یک ربات، خوش آمدگویی به کاربران در سرور است. اینها می توانند به همین سادگی باشند “خوش آمدید (کاربر)!” به استقبال دقیق تر، از جمله پیام های تصادفی. رشته ای که برمی گردانید کاملاً به شما بستگی دارد و تخیل شما محدودیت است.
وقتی عضوی به سرور discord اضافه می شود guildMemberAdd
رویداد فعال میشود، که میتوانید مانند رویدادهای دیگر به آن گوش دهید. برای مشاهده این رویداد، قبلاً یک مورد را اضافه کردیم intent
تماس گرفت GUILD_MEMBERS
که به ما اجازه می دهد به آن گوش دهیم.
ابتدا بیایید عضوی را که وارد می شود و print آنها را به console:
bot.روی('guildMemberAdd', (member) => {
console.log(member)
});
اسکریپت را دوباره اجرا کنید، و زمانی که کاربر جدیدی وارد شد، با چیزی شبیه به موارد زیر مواجه خواهید شد:
GuildMember {
guild: <ref *1> Guild {
id: '<USER_ID>',
name: undefined,
icon: undefined,
features: undefined,
commands: GuildApplicationCommandManager {
permissions: (ApplicationCommandPermissionsManager),
guild: (Circular *1)
},
members: GuildMemberManager { guild: (Circular *1) },
channels: GuildChannelManager { guild: (Circular *1) },
bans: GuildBanManager { guild: (Circular *1) },
roles: RoleManager { guild: (Circular *1) },
presences: PresenceManager {},
voiceStates: VoiceStateManager { guild: (Circular *1) },
stageInstances: StageInstanceManager { guild: (Circular *1) },
invites: GuildInviteManager { guild: (Circular *1) },
deleted: false,
available: false,
shardId: 0,
memberCount: NaN
},
joinedTimestamp: 1633939430866,
premiumSinceTimestamp: null,
deleted: false,
nickname: null,
pending: false,
_roles: (),
user: User {
id: '<USER_ID>',
bot: false,
system: false,
flags: UserFlags { bitfield: 0 },
username: '<MEMBER_USERNAME>',
discriminator: '<MEMBER_DISCRIMINATOR>',
avatar: null,
banner: undefined,
accentColor: undefined
},
avatar: null
}
یک سری اطلاعات وجود دارد روی را GuildMember
(اختلاف کاربر در یک سرور) که به تازگی به آن ملحق شده است، اما نکات جالب برای ما عبارتند از:
guild
– اطلاعات سرور، با ویژگی هایی مانندid
،name
،members
،channels
،presences
، و غیره._roles
– آرایه ای حاوی نقش های کاربر در سرور، در صورت وجود.user
– اطلاعات کاربر، با ویژگی هایی مانندid
،bot
،username
،discriminator
، و غیره.discriminator
یک عدد صحیح است که بخشی از نام کاربری کامل است که معمولاً به شکل زیر است:randomUser#1234
، بنابراین1234
تبعیض آمیز است
در مورد اینکه تفاوت بین a چیست سردرگمی زیادی وجود دارد User
و الف GuildMember
، و واقعاً به این خلاصه می شود:
آ
User
یک کاربر جهانی Discord است و الفGuildMember
آن کاربر در یک سرور است. این یک نمایندگی یک کاربر، با مجوز، نقش، نام مستعار، و غیرهUser
می تواند چندگانه داشته باشدGuildMember
به آن متصل است، با aGuildMember
برای هر سرور شما اساساً می توانید آن را به عنوان “چهره” یک کاربر در یک زمینه مشخص ببینید.
حالا بیایید کد را تغییر دهیم تا اینطور نشود print را GuildMember
به عنوان مثال، بلکه به آنها سلام کنید. به طور معمول، یک کانال متنی اختصاصی برای احوالپرسی و خوش آمدگویی وجود دارد – و شما نکن می خواهند از #general
کانال برای این
توجه داشته باشید: علاوه بر این، اغلب اوقات الف نیز وجود دارد #bot-spam
کانالی برای خروجی ربات ناچیز که ممکن است کانال های چت واقعی را درهم بریزد. البته می توانید به سادگی پیام های خاصی را ارسال نکنید، اما ثبت آنها نیز کمک می کند روی سرور یا یک فایل خارجی برای استفاده بعدی.
اگر نمیخواهید عمومی شود، میتوانید این کانال را از دید کاربران عادی پنهان کنید.
با کلیک کردن می توانید یک کانال جدید ایجاد کنید روی منوی کشویی کنار نام سرور و کلیک کردن روی ایجاد کانال. اعلان از شما می پرسد که آیا می خواهید یک متن یا صدا کانال ما یک متن را انتخاب می کنیم و نام آن را می گذاریم #welcome
.
ما میتوانیم با بهدستآوردن نمونههای کانال، پیامی به کانال ارسال کنیم send()
روش. نمونه ها از طریق شناسه کانال به دست می آیند که در طول عمر ربات شما به عنوان یک ثابت شناخته می شود.
برای دریافت شناسه یک کانال، باید آن را بچرخانیم حالت توسعه دهنده onو از رابط کاربری برنامه استفاده کنید. با کلیک کردن روی چرخ دنده کوچک در پایین سمت چپ برنامه، به تنظیمات Discord خود بروید. زیر تنظیمات برنامه در قسمت سمت چپ پنجره، شما یک را پیدا خواهید کرد پیشرفته برگه بازگشت روی را حالت توسعه دهنده. این به ما امکان می دهد شناسه کانال را بازیابی کنیم. این کار با کلیک راست انجام می شود روی نام کانال و کلیک کردن کپی شناسه.
بیایید از آن شناسه استفاده کنیم fetch()
یک کانال و ارسال پیام به آن، روی()
رویداد پیوستن کاربر به:
bot.روی('guildMemberAdd', (member) => {
const channelId = 'CHANNEL_ID'; // The Channel ID you just copied
const welcomeMessage = `Hey <@${member.id}>! Welcome to my server!`;
member.guild.channels.fetch(channelId).then(channel => {
channel.send(welcomeMessage)
});
});
همانطور که قبلاً دیدیم، الف guild
اطلاعاتی در مورد کانال های خود دارد که می توانیم با آنها بازیابی کنیم member.guild.channels
. در نهایت برای بدست آوردن کانال مورد نظر، متد را فراخوانی می کنیم fetch()
و شناسه کانال را به عنوان پارامتر ارسال کنید. این متد a را برمی گرداند Promise
، پس باید با a دنبال شود then()
، که در آن تابعی را تعریف می کنیم که بعد از بازیابی کانال مورد نظر اجرا شود. در این مورد، این ساده خواهد بود .send()
حاوی متن پیام
باز هم، در اینجا می توانید کارهای بیشتری انجام دهید، مانند انتخاب یک پیام تصادفی از لیست الگوها، ثبت اطلاعات خارج از کانال و غیره.
اگر میخواهید درباره Promises بیشتر بخوانید، راهنمای Promises ما را در Node.js بخوانید!
را <@${member.id}>
پیام به سادگی کاربر را در یک پیام برچسب گذاری می کند، بنابراین هنگام پیوستن به سرور، یک اعلان برای این پیام دریافت می کند. شما می توانید حذف کنید @
در ابتدا برای رد شدن از بخش برچسب گذاری، سرورها اغلب افراد را برای جلب توجه آنها تگ می کنند و برای مثال آنها را به خواندن قوانین یک سرور هدایت می کنند.
وقتی کاربر به سرور شما میپیوندد، با پیام شما استقبال میشود:
عالی! بیایید جلو برویم و به ربات خود کمی استقلال بیشتری بدهیم، با اجازه دادن به آن برای برداشتن عبارات یا کلمات خاص و واکنش به آنها.
پیام های موجود در کانال را شناسایی کرده و به آنها واکنش نشان دهید
هنگامی که افراد به سرور شما ملحق می شوند، پیام هایی ارسال می کنند. هر پیامی که ارسال می شود، یک پیام ایجاد می کند messageCreate
رویدادی که بدون تعجب می توانید به آن گوش دهید. شما نمی خواهید کاربران را اسپم کنید روی هر پیام، اما مواردی وجود دارد که ربات شما ممکن است بخواهد به چیزی واکنش نشان دهد.
به عنوان مثال، اگر کسی با ربات یا کاربری تماس میگیرد، کلمات غیر حساسی را شامل میشود، ممکن است بخواهید از ربات پاسخ دهید یا اقدامی انجام دهید. به عنوان مثال، بیایید دو شنونده اضافه کنیم – یکی که ربات را وادار می کند به کاربرانی که آن را درخواست می کنند واکنش نشان دهد و دیگری که وقتی افراد کلمات نامناسب را در پیام های خود ارسال می کنند واکنش نشان می دهد.
توجه داشته باشید: برای شناسایی پیام ها، به GUILDS
و GUILD_MESSAGES
مقاصد
هنگام دریافت پیام، message
شی شامل content
از پیام، channel
پیام از کجا آمده است، و غیره. سپس، فقط باید بررسی کنیم که آیا آن رشته دارای رشتههای دیگری است یا خیر:
bot.روی('messageCreate', (message) => {
if (message.content.toLowerCase().includes('hey bot') || message.content.toLowerCase().includes('general kenobi')) {
message.channel.send('Hello there!');
}
});
bot.روی('messageCreate', (message) => {
if (message.content.toLowerCase().includes('fudge') || message.content.toLowerCase().includes('pudding')) {
message.channel.send('Such language is prohibited!');
}
});
ربات فقط به پیام های تعریف شده در پاسخ می دهد if
بند و در همان کانالی که پیام از آن سرچشمه گرفته است، همانطور که از message
خود شی البته می توانید پیام را به کانال دیگری نیز ارسال کنید یا آن را به کانال مخفی که فقط برای ادمین ها رزرو شده است هدایت کنید.
هنگامی که اسکریپت را دوباره اجرا کردید، و چند پیام را تایپ کردید، ربات پاسخ خواهد داد!
توجه داشته باشید: ربات به پیامهای خود واکنش نشان میدهد، زیرا آنها نیز پیام را شلیک میکنند messageCreate
رویداد هنگام ارسال
اگر پاسخ شما به یک کاربر حاوی کلماتی باشد که ممکن است با سایرین مطابقت داشته باشد if
بیانیه ها، ربات شما ممکن است تا بی نهایت به خودش پاسخ دهد:
bot.روی('messageCreate', (message) => {
if (message.content.toLowerCase().includes('fudge') && message.content.toLowerCase().includes('pudding')) {
message.channel.send('Why of course, I love fudgy pudding cake!');
} else if (message.content.toLowerCase().includes('fug') || message.content.toLowerCase().includes('pudding')) {
message.channel.send('Such language is prohibited!');
}
});
کیک پودینگ فودی خوشمزه است، بنابراین اگر کسی به ما بگوید که پودینگ را فود کنیم، باید به آن اشاره داشته باشد. process از ایجاد کیک، بنابراین ما با یک پیام خوب پاسخ می دهیم – با این حال، “پودینگ” در پاسخ با یک کنترل کننده رویداد جدید ایجاد شده توسط پاسخ مطابقت دارد. بنابراین، ربات پاسخ می دهد که پیام با خودش:
بله شما به راحتی می توانید یک حلقه بی نهایت مانند این ایجاد کنید. برای مثال:
bot.روی('messageCreate', (message) => {
if (message.content.toLowerCase().includes('a')) {
message.channel.send('a');
}
});
این قطعه کد با پاسخ خواهد داد "a"
هر زمان که یک پیام حاوی "a"
– که منجر به یک جریان بی نهایت از انفجارهای 5 پیامی از ربات می شود "a"
:
هنگام بررسی و پاسخ دادن به پیام ها مراقب باشید و مراقب باشید که چگونه روش های قدرتمندی مانند includes()
یا contains()
می تواند باشد. خوشبختانه، اجتناب از این موضوع بسیار ساده است.
ربات را از پاسخ دادن به خودش متوقف کنید
شما نمیخواهید ربات به خودش پاسخ دهد، یا در مثالهایی مانند نمونهای که کیک پودینگ فدی دارد، با خود تناقض داشته باشد. خوشبختانه، میتوانید به راحتی بررسی کنید که چه کسی پیام را ارسال کرده و اگر توسط یک ربات ارسال شده است، آن را نادیده بگیرید، و از مشکل حلقه بینهایت اجتناب کنید:
if (message.author.bot) {
return;
}
بیایید این چک را در مثال قبلی خود اضافه کنیم:
bot.روی('messageCreate', (message) => {
if (message.author.bot) {
return;
} else if (message.content.toLowerCase().includes('fudge') && message.content.toLowerCase().includes('pudding')) {
message.channel.send('Why of course, I love fudgy pudding cake!');
} else if (message.content.toLowerCase().includes('fug') || message.content.toLowerCase().includes('pudding')) {
message.channel.send('Such language is prohibited!');
}
});
اولین if
بیانیه بررسی می کند که آیا الف bot
پیام فرستاده یا نه اگر چنین بود، قوانین زیر واقعاً اعمال نمی شوند، بنابراین ما هرگز وارد حالت بی نهایت نمی شویم. بیایید یک پیام احساسی دیگر برای ربات در رابطه با کیک آنها ارسال کنیم:
آثار بزرگ!
ایجاد دستورات ربات
از آنجایی که ما دیدیم که چگونه process پیامهایی که به سرور ارسال میشوند، اکنون برخی از دستورات را برای آن تعریف میکنیم تا کاربران بتوانند از طریق یک محیط کنترلشده به آن فرمان دهند. اول از همه، اجازه دهید با پیامی متفاوت از کاربران خود استقبال کنیم. ما باید به آنها اطلاع دهیم که چگونه لیست دستورات را پیدا کنند و چگونه از آنها استفاده کنند:
bot.روی('guildMemberAdd', (member) => {
const channelId = 'CHANNEL_ID';
const welcomeMessage = `Hey <@${member.id}>! Welcome to my server! \n See commands list by typing: $listCommands`;
member.guild.channels.fetch(channelId).then(channel => {
channel.send(welcomeMessage)
});
});
دستورات در واقع فقط پیام هایی هستند که از فرم خاصی پیروی می کنند که شما برای خود تنظیم کرده اید، و ما می توانیم دستورات را همانطور که تاکنون برای پیام ها بررسی کرده ایم بررسی کنیم.
توجه داشته باشید: لازم نیست از آن استفاده کنید $
نماد برای نشان دادن دستورات برخی از نقاط استفاده می کنند (.
، اسلش (/
) و غیره به طور کلی، مقداری نماد برای نشان دادن یک فرمان به جای یک پیام استفاده می شود.
بیایید دستورات، از جمله دستورات را کدگذاری کنیم $listCommands
یکی ما می توانیم این کار را در داخل یکی از موجود انجام دهیم messageCreate
شنوندگان یا یکی جدید – ما فقط process ناهمسان message.content
. برای سبک سازی پاسخ لیست دستورات، از a استفاده می کنیم MessageEmbed
که شبیه یک بلوک نقل قول به نظر می رسد. این به ما امکان می دهد رنگ، عنوان، توضیحات و همچنین فیلدهایی را با کلیدها (نام) و مقادیر آنها برای توصیف دستورات تنظیم کنیم.
برای استفاده MessageEmbed
موارد، ما نیاز داریم import ابتدا آن را از Discord.js انجام دهید، بنابراین اجازه دهید کلاس های اولیه وارد شده را به روز کنیم:
const {
Client,
Intents,
MessageEmbed
} = require('discord.js');
اکنون، ما می توانیم یک جدید ایجاد کنیم if
بیانیه ای برای مدیریت دستورات:
bot.روی('messageCreate', (message) => {
if (message.content.toLowerCase().includes('hey bot') || message.content.toLowerCase().includes('general kenobi')) {
message.channel.send('Hello there!');
}
if (message.content == '$listCommands') {
const exampleEmbed = new MessageEmbed()
.setColor('#ffd046')
.setTitle('Server Commands')
.setDescription('Here you can see the list of the commands used روی the server: ')
.addFields(
{ name: "`$like`", value: 'Likes the current message' },
{ name: "`$dislike`", value: 'Dislikes the current message'},
{ name: "`$random`", value: 'Returns a random number'},
)
message.channel.send({embeds: (exampleEmbed)})
}
if (message.content == '$like') {
message.react('👍');
}
if (message.content == '$dislike') {
message.react('👎');
}
if (message.content == '$random') {
message.react('✅');
let randomNumber = getRandomNumber(0, 1000);
message.reply(`Your random number is ${randomNumber}.`)
}
});
ما همچنین یک روش کمکی برای تولید یک عدد تصادفی در یک محدوده خاص داریم:
function getRandomNumber(min, max) {
return Math.floor(Math.random() * (max-min) + min);
}
را if-else
ممکن است clause بهترین گزینه برای پردازش دستورات نباشد، اما اگر تعداد کمی از آنها وجود داشته باشد، خوب است. با این حال، اگر میخواهید سرور شما طیف گستردهای از دستورات را داشته باشد، احتمالاً باید در نظر داشته باشید که آنها را در یک فایل قرار دهید و از یک ربات بخواهید که دستور مناسب را پیدا کند و در هنگام ارسال پیام به آن واکنش نشان دهد.
اجرای مجدد اسکریپت به ما امکان می دهد از این دستورات استفاده کنیم:
تغییر حضور ربات
هنگامی که یک ربات وارد سیستم می شود، می توانید حضور آن را تغییر دهید. این می تواند به معنای این باشد که ربات وجود دارد روی آماده به کار، منتظر دستورات یا وظایف، یا به سادگی تنظیم آهنگ خدمات خود را. برای مثال، میتوانید آن را روی «بازی کردن» در حین آنلاین یا «خدمت به جامعه» تنظیم کنید.
این یک کنسرت کوچک اختیاری است، اما میتواند از نظر طنز و زمان و زمان در دسترس بودن و آنلاین بودن ربات به شما کمک کند:
bot.login('YOUR_BOT_TOKEN').then(() => {
bot.user.setPresence({ activities: ({ name: 'a random game', type: 'PLAYING' }), status: 'online' });
});
حضور با فعالیت ها و وضعیت تعریف می شود. فعالیت ها مجموعه ای از فعالیت هایی هستند که کاربر انجام می دهد. آنها یک name
و الف type
. را type
یک ماکرو است و می توان آن را تنظیم کرد PLAYING
، WATCHING
، LISTENING
، STREAMING
و COMPETING
. آنها شبیه شروع جمله برای حضور هستند، بنابراین name
ادامه آن است.
حضور برای کد بالا باید به شکل زیر باشد:
نتیجه
رباتهای Discord انعطافپذیر هستند و تخیل شما برای کدنویسی آنها محدود است. آنها بدون شک یکی از دلایل اصلی ظهور Discord به عنوان یک پلتفرم جامعه سازی و یک پیام رسان و برنامه ارتباطی عالی هستند.
Discord یک جامعه واقعاً بزرگ و یک سنت خوب از سرورهای Discord دارد، با بسیاری از سرورهای واقعا مفید. اگر ایده ای از خود دارید، اکنون زمان شروع توسعه سرور است!
(برچسبها برای ترجمه)# جاوا اسکریپت
منتشر شده در 1403-01-14 13:29:03