Гузариш ба мундариҷа
Мавзӯи 2 аз 6

Рӯйдодҳо ва паёмҳо

discord.py — китобхона барои ботҳои Discord: модератсия, мусиқӣ, бозиҳо ва викторинаҳо дар серверҳо. Мисли aiogram, вай асинхронӣ аст.

Дар курс шумо боти викторинаи хурд месозед: фармонҳо, кортҳои зебои эмбед, тугмаҳо ва ҳисоби холҳо.

Тайёр кардани бот

  1. Discord Developer Portal-ро кушоед, New Application-ро пахш кунед ва ном интихоб кунед.
  2. Дар ҷадвалчаи Bot Reset Token-ро пахш карда, токенро нусха бардоред — ин пароли бот аст, онро ба ҳеҷ кас нишон надиҳед. Дар ҳамон ҷо Message Content Intent-ро фаъол кунед.
  3. Дар ҷадвалчаи 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(...); ба ботҳо ҷавоб намедиҳем.