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

Тугмаҳо

Бо матн навиштани ҷавобҳо суст аст. Дар discord.py дар зери паём тугмаҳо гузоштан мумкин — ва пахшҳоро мустақиман дар код коркард кардан.

View ва тугмаҳо

class VoteView(discord.ui.View):
    def __init__(self):
        super().__init__(timeout=180)       # баъди 180 сония тугмаҳо кор намекунанд
        self.votes = {}

    @discord.ui.button(label="Ҳа", style=discord.ButtonStyle.success)
    async def yes(self, interaction: discord.Interaction, button: discord.ui.Button):
        await interaction.response.send_message("Овоз қабул шуд", ephemeral=True)


await message.channel.send("Боз як давр бозӣ кунем?", view=VoteView())
  • View — маҷмӯи унсурҳо дар зери паём ва коркардкунандаҳои онҳо; ҳар паём объекти View-и худро бо маълумоти худ (self.votes) дорад;
  • @discord.ui.button(label=…, style=…) методро ба тугма табдил медиҳад; услубҳо — primary (кабуд), success (сабз), danger (сурх), secondary (хокистарӣ);
  • метод interaction — пахшро мегирад: interaction.user — кӣ пахш кард, interaction.response — чӣ тавр ҷавоб додан.

Ҷавоб ба пахш

Ба ҳар пахш маҳз як бор ҷавоб додан лозим:

await interaction.response.send_message("Матн")                      # паёми нав
await interaction.response.send_message("Танҳо ба шумо", ephemeral=True) # танҳо пахшкунанда мебинад
await interaction.response.edit_message(content="Матни нав", view=self)  # паёмро бо тугмаҳо иваз кардан

Агар дар 3 сония ҷавоб надиҳед, Discord ба корбар «Хатои ҳамкорӣ» нишон медиҳад.

Иваз кардани тугмаҳо

button.label = "Пахш шуд: 5"
button.disabled = True
for item in self.children:      # ҳамаи унсурҳои View
    item.disabled = True
await interaction.response.edit_message(view=self)

Тағйирот танҳо баъди edit_message(view=self) ба корбарон намоён мешавад. Аввал тугмаҳоро иваз кунед, баъд паёмро нав кунед. self.stop() View-ро анҷом медиҳад — вай дигар пахшҳоро интизор намешавад.

Тугмаҳо дар давра

Агар вариантҳо пешакӣ маълум набошанд (саволҳои викторина), тугмаҳоро дар давра месозанд:

for option in options:
    button = discord.ui.Button(label=option)
    button.callback = self.make_handler(button)
    self.add_item(button)

Функсияи-корхонаи make_handler(button) коркардкунандаеро бармегардонад, ки тугмаи худро «дар хотир медорад».

Хулоса

  • discord.ui.View, @discord.ui.button(label, style), channel.send(…, view=…);
  • interaction.user, interaction.response.send_message / edit_message, ephemeral=True;
  • button.label, button.disabled, self.children, баъд edit_message(view=self);
  • тугмаҳо дар давра: discord.ui.Button, callback, add_item.