ساختن بات دیسکورد به زبان پایتون
تو این اموزش یاد میگیرید چطوری یک بات دیسکورد به زبان پایتون بنویسید
-
PyCharm(من خودم از پای چارم استفاده میکنم شما میتونین بجاش از ویژوال استودیو کد استفاده کنید!)
-
discord devloper(برایه ساخت بات)
اول از همه میرسیم به راحت ترین بخش کار یعنی ساخت بات اول میرین تویه سایت discord devloper بعد که رفتید تو این سایت برین قسمت Applications
رویه new application کلیک کنید بعد باتو بسازید که اموزشش اینجاست!
bandicam.2023-05-12.10-19-20-032.mp4
- بعد میرسیم به اصل کاری یعنی ساخت بات و تیک هایی که باید زده بشه و پروفایل بات اموزش کلی این ویدیویه زیر💁
bandicam.2023-05-12.10-51-57-248.mp4
- خب ما الان باتو ساختیم چطور اینوایتش بدیم به سرورمون؟
- باید اول پرمیشن هایه بات رو مشخص کنید سپس اون پاین یه لینکی بهتون میده میرین تو مرورگر میزنید باتتونو اینوایت میدین!
- به این شکل
- اول تیک باتو میزنید یه لیست اون پاین باز میشه که چیزایی که ما برایه باتمون باید فعال کنیم ایناس!
- یا دیدین یکسری از بات ها add to server دارن پاین نیک نیمشون؟
- برید تویه جنرال و مراحل زیر رو انجام بدید توجه داشته باشید ادمیناستور نزنید و همون پرم هایه قبل رو بش بدید
هورا الان بات ما به سرور اد شد و اد تو سرور هم داره!!!
اینجا ما میرسیم به بخش مهم داستان یعنی انلاین کرد بات و تنظیم استاتوس ها
- اول از همه به چندتا نکته باید توجه داشته باشین
- اول اینکه ما این اموزش رو به روش cogs که روش حرفه ای تری نسبت به روش معمولی تک فایلی و سریع تر بهتری است انجام میدیم
- بنابرین لذا اگه شما کدی دارین که توش از روش تک فایلی استفاده کردید و میخاین تبدیل به cogs کن همینطوری نمیشه
- شما باید چندتا چیز رو تعریف کنید مثل slef و اینا و یسری چیزا پشتشون سلف بزارید
- بنابرین کدی که به روش تک فایلی نوشته شده رو همینجوری تبدیل به cogs نکنین!!
***اول شما در هر برنامیه ویرایش کدی هستید یک فایل بنام main.py
***بسازید که معمولا خودش خودکار تو پای چارم انجام میشه
حالا وقتشه که کد ران بات رو بزنیم!!
import discord
from discord.ext import commands
from pathlib import Path
import json
import logging
logging.basicConfig(level=logging.DEBUG)
# Load bot configuration from JSON file
with open("config.json") as f:
config = json.load(f)
# Set up bot intents
# Command to generate an embed message containing information about a specified user
class Bot(commands.Bot):
def __init__(self, config):
super().__init__(
command_prefix="!",
help_command=None,
intents=discord.Intents.all(),
application_id=config["application-id"]
)
self.config = config
async def setup_hook(self):
for file in Path("cogs").glob("*.py"):
cog_name = file.name.split(".")[0]
await self.load_extension(f"cogs.{cog_name}")
print("loaded extention:", file.name)
await self.tree.sync()
async def on_ready(self):
logging.info(f"{self.user.name} has connected to Discord!")
print(f"Connected to {len(self.guilds)} guilds")
activity = discord.Activity(name='fela heci', type=discord.ActivityType.watching)
await self.change_presence(status=discord.Status.idle, activity=activity)
if __name__ == "__main__":
config = json.loads(open("config.json").read())
bot = Bot(config)
bot.run(config["token"])
خب طبیعتا کد بالا رو همینجوری بزنید کار نمیکنه پس باید پیش نیاز هارو نصب کنید اینجوری
pip install discord.py
pip install pathlib
این دستورات رو تویه Command prompt
تویه ترمینال بزنید و بوم پیش نیاز ها نصب شد
اما ما یچیز دیگه میخایم اونم config.json هست
- برایه درست کردنش دقیفا کنار
main.py
یک فایل بسازید بنامconfig.json
- بعد توش کدایه زیر رو بنویسید
{
"token": "your_bot_token",
"application-id": "application_id_of-your_bot"
}
باید بجایه token
توکن بات خودتون رو قرار بدید و بجایه application-i
اپیکیشن ایدی باتتون رو قرار بدید که اموزش دوتاشون اینجاست
bandicam.2023-05-14.15-46-41-466.mp4
بعد که این کارارو کردید و توکن اپیکیشن ایدی خودتون رو قرار دادید باید بریم سراغ ران بات! الان تست میکنیم ببینیم بات ران میشه یا نه نکتهاگر تو ویژوال استودیو کد هستید باید پایتون رو نصب کنید از خودش ولی تویه پای چارم نیازی نیست
bandicam.2023-05-14.16-00-14-294.mp4
هورا باتمون انلاین شد!
استاتوس بطور کلی میشه از نوع اکتیویتی بات مثل online idle و چیزایی که کنار پروفایلشون نمایش داده میشه بطور کلی به اینا میگن استاتوس چیزی که خودتونم میتونید داشته باشید! تو بات ما استاتوس ما به idle و نوشته کنار پروفایلش به watching fela hici تنظیم شد شما میتونید هرچی میخاید بزارید
خب مثلا ما اینجا استاتوس رو به do not distrub تنظیم کردیم نوشته هم به sus boy flying و نوعش هم به playing
async def on_ready(self):
logging.info(f"{bot.user.name} has connected to Discord!")
print(f"Connected to {len(bot.guilds)} guilds")
activity = discord.Activity(name='sus boy flying', type=discord.ActivityType.playing)
await bot.change_presence(status=discord.Status.dnd, activity=activity)
توجه داشته باشید همیشه باید این استاتوس هارو تو تابع ان ردی بزارید تو نسخه هایه جدید discord.py
تابع on_ready
هم همون تابع ایه که وقتی بات انلاین شد میگه بات انلاین شد یا مثل کد من هم بگه بات انلاین شد هم تعداد سرورا رو بگه
خب رسیدیم به بخشی که خیلیا منتظرش بودن یعنی ساخت اولین کامند بات! چندتا نکته توجه داشته باشید
- اول همه این که باید یک فایل cogs تو همون فایل پراجکتتون بسازید حواستون باشه جایه دیگه ای نزارید
- دوم اینکه همه کامندا این اموزش اسلشی هستن چون پیشرفته تر و راحت تره و معلومم نیست کامندا پرفیکسی تا کی تو دیسکورد بمونن
- دوباره تاکیید میکنم کد هایه تک فایلی رو اول به روش cogs درست کنین سپس بزارید اینجا!
خب برگردیم سراغ اموزش اول تویه اون فایل cogs یک فایل میسازید با هر اسمی فقط اخرش
.py
باشه حتما
حالا ما میخایم یه کد اسلشی با نام ping بسازیم که بگه pong !
اول اینارو ایمپورت کنید
import discord
from discord.ext import commands
from discord import interactions, app_commands
class Ping(commands.Cog):
def __init__(self, bot):
self.bot = bot
@app_commands.command(name="ping", description="in command beton mige pong")
async def ping(self, ctx: interactions):
await ctx.response.send_message("Pong!")
async def setup(bot):
await bot.add_cog(Ping(bot))
این یک کد ساده اسلشی هست که به شما میگه pong بریم تستش کنیم!
bandicam.2023-05-19.20-02-03-175.mp4
- خب شاید بخاین کامندی که میزنید رو فقط خودتون ببینید و کس دیگه ای نبینه پس میاید اینا و این کارو میکنید
- توجه کنید این قابلیت فقط برا اسلش کامند و باتن هاست باسه کامند معمولی یا چیز دیگه ای نمیشه
بوم و پیام بات ما فقط برا خودمون نمایش داده میشه!
باتن ها یک چیز خیلی خوب هستن که باهاشون میشه همه کاری کرد این یک نمونه باتن هست
import discord
from discord import interactions, app_commands
from discord.ext import commands
class Button(discord.ui.View):
def __init__(self, *, timeout=180):
super().__init__(timeout=timeout)
@discord.ui.button(label="yek dokme", style=discord.ButtonStyle.danger, emoji="📁")
async def vay(self, interaction: discord.Interaction, button: discord.ui.Button):
await interaction.response.send_message("oh to roye button click kardi", ephemeral=True)
class Buttonn(commands.Cog):
def __init__(self, bot):
self.bot = bot
@app_commands.command(name="button", description="yek adad button")
async def button(self, ctx: interactions):
await ctx.response.send_message("inja yek adad button hast!", view=Button())
async def setup(bot):
await bot.add_cog(Buttonn(bot))
تویه کد بالا ما یک کلاس برایه باتن ساختیم و تویه کامندمون اون اخر گفتیم view=Button
که نام کلاس باتنمون هست تا کد اون رو شناسایی کنه
استایلم به danger و ایموجی باتن به 📁 تنظیم شده که بعدا اینارو توضیح میدم که چین بریم اول تستش کنیم !