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

Боти-викторина

Ҳама чизро якҷоя — саволҳо, санҷиши ҷавобҳо, холҳо ва ҷадвали ниҳоиро — дар боти-викторина ҷамъ мекунем.

Санҷиши одилонаи ҷавобҳо

Бозингарон ҷавобҳоро чӣ тавре хоҳанд, менависанд: «Уторид», «уторид!», « УТОРИД». Бинобар ин ҳам ҷавоби дуруст ва ҳам ҷавоби бозингарро аввал меъёрӣ мекунанд:

import re


def normalize(text):
    text = text.lower().replace("ё", "е")
    return " ".join(re.findall(r"\w+", text))
  • lower() пеш аз иваз кардани «ё» — вагарна «Ё»-и калон иваз намешавад;
  • re.findall(r"\w+", …) танҳо калимаҳоро мегузорад — аломатҳои китобат ва фосилаҳои зиёдатӣ нопадид мешаванд;
  • калимаҳоро бо як фосила мепайванданд, на мечаспонанд: вагарна «1945 сол» бо «1945сол» мувофиқ меояд.

Ҳолати бозӣ

Бот метавонад ҳамзамон дар каналҳои гуногун ва дар серверҳои гуногун бозӣ кунад. Бинобар ин ҳолатро аз рӯи канал нигоҳ медоранд:

GAMES = {}        # рақами канал → {"index": …, "open": …}
game = GAMES.setdefault(message.channel.id, {"index": -1, "open": False})

Байрақчаи open саволро баъди ҷавоби дурусти аввал мебандад — холро аз ҳама зудтарин мегирад. Холҳои бозингаронро аз рӯи author.id нигоҳ доред.

Барои он ки маълумот аз нав оғоз шудани ботро паси сар кунад, онро дар файл (JSON) ё пойгоҳ (SQLite) захира мекунанд.

Ҷойҳо

Ҷойҳоро бо баробарӣ чунин ҳисоб мекунанд: ҷой = 1 + шумораи бозингароне, ки холашон бештар аст. Он гоҳ бозингарони баробар ҷойро тақсим мекунанд, навбатӣ бошад ҳамаи болоиҳоро ба назар мегирад:

place = 1 + sum(1 for s in SCORES.values() if s > score)

Барои холҳои 5, 5, 3, 1 натиҷа 1, 1, 3, 4 мешавад.

Оғоз дар сервер

Барои он ки бот ҳангоми хомӯш будани компютери шумо кор кунад, онро дар сервер (VPS) ё дар абр оғоз мекунанд — ҳамон тавре ки ботҳои Telegram-ро. Токенро тавассути тағйирёбандаи муҳити DISCORD_TOKEN медиҳанд, на дар код менависанд.

Хулоса

  • меъёрикунии ҷавобҳо: lower, «ё» → «е», \w+, як фосила;
  • ҳолат аз рӯи channel.id, холҳо аз рӯи author.id, савол баъди ҷавоби дурусти аввал баста мешавад;
  • ҷойҳо бо баробарӣ: 1 + шумораи бозингарони болотар;
  • натиҷа дар эмбед.