Рӯйдодҳо ва паёмҳо
discord.py — китобхона барои ботҳои Discord: модератсия, мусиқӣ, бозиҳо ва викторинаҳо дар серверҳо. Мисли aiogram, вай асинхронӣ аст.
Дар курс шумо боти викторинаи хурд месозед: фармонҳо, кортҳои зебои эмбед, тугмаҳо ва ҳисоби холҳо.
Тайёр кардани бот
- Discord Developer Portal-ро кушоед, New Application-ро пахш кунед ва ном интихоб кунед.
- Дар ҷадвалчаи Bot Reset Token-ро пахш карда, токенро нусха бардоред — ин пароли бот аст, онро ба ҳеҷ кас нишон надиҳед. Дар ҳамон ҷо Message Content Intent-ро фаъол кунед.
- Дар ҷадвалчаи OAuth2 → URL Generator
botва ҳуқуқҳоро (Send Messages, Read Message History) қайд кунед, истинодро кушоед ва ботро ба сервери худ илова кунед.
Боти ҳадди ақал
import os
import discord
intents = discord.Intents.default()
intents.message_content = True # иҷозати хондани матни паёмҳо
client = discord.Client(intents=intents)
@client.event
async def on_ready():
print(f"Бот {client.user} ба кор даромад")
@client.event
async def on_message(message):
if message.author.bot: # ба ботҳо ва ба худ ҷавоб намедиҳем
return
if message.content == "!ping":
await message.channel.send("Pong!")
client.run(os.getenv("DISCORD_TOKEN"))
- Intents — бот кадом рӯйдодҳоро гирифтан мехоҳад. Матни паёмҳо нияти «имтиёзнок» аст: онро ҳам дар код ва ҳам дар Developer Portal фаъол мекунанд;
@client.eventфунксияро аз рӯи номаш ба рӯйдод обуна мекунад:on_ready,on_message,on_member_join,on_reaction_add…;client.run(token)ба Discord пайваст мешавад ва то қатъ шудани барнома кор мекунад.
Паём
message.content— матн;message.author— муаллиф:display_name(ном дар сервер),id(рақами доимӣ),bot(оё бот аст);message.channel.send(матн)— ҷавоб ба ҳамон канал,message.reply(матн)— ҷавоб бо иқтибос,message.author.send(матн)— ба паёми шахсӣ;- ҳамаи ин методҳо корутинаҳо мебошанд, онҳоро бо
awaitдаъват мекунанд.
on_message ҳамаи паёмҳоро мегирад, аз ҷумла паёмҳои худи ботро. Бинобар ин сатри аввал қариб ҳамеша санҷиши message.author.bot аст: вагарна ду бот метавонанд бепоён ба ҳамдигар ҷавоб диҳанд.
Масъалаҳо чӣ тавр санҷида мешаванд
Дар масъалаҳо мантиқи бот дар функсияи handle(message) аст, ки онро on_message даъват мекунад. Санҷиш ба он паёмҳои тайёрро бе Discord медиҳад ва ҷавобҳои ботро чоп мекунад. Барои ҳақиқатан оғоз кардани бот тағйирёбандаи муҳити DISCORD_TOKEN-ро диҳед ва «Дар компютери худ иҷро кардан»-ро пахш кунед.
Хулоса
discord.Client(intents=…),message_content = True;@client.event+on_ready,on_message;message.content,message.author.id / display_name / bot;await message.channel.send(...); ба ботҳо ҷавоб намедиҳем.