Skip to content

taltech-coding/discord-bot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🚀 ChatBoti Töötuba

Sissejuhatus

Sinu väike käsilane sõprade spämmimises, vaenlaste luuramises ja raha teenimises!

Täna loome Discordis töötava Chatbox-stiilis boti. Ülesannete näidislahendused leiad solutions kaustast!

Setup

Kõigepealt suundu terminali ja sisesta:

pip install discord.py python-dotenv

Nüüd loo .env fail ja määra sinna oma Discordi boti token:

TOKEN=siia_oma_boti_token

🤖 1. Boti käivitamine

Failis main.py on on_ready() meetod,mis käivitub esimesena kui bot käivitub. Lisa sinna print lause, mis annaks märku, et bot käivitus. Selleks kasuta client.user muutujat. Pea meeles, et iga async meetod tahab await sõna ette, kui tegutsetakse boti või failist lugemisega, kui mitte print lause!

Kui kõik on õigesti seadistatud, saad boti käivitada:

python main.py

Kui bot ühendub edukalt, peaksid terminalis nägema kõigepealt 2 punast rida ning seejärel oma boti nime.

💬 2. Märgusõnadele vastamine

Liigu faili response.py

  1. Lisa sõnastikku responses võtmeks mõni märgusõna ja väärtuseks lause, mida sa tahad, et bot vastaks chatis märgusõnale.
  2. get_response meetodisse lisa if tingimus, kui user_input leidub responses võtmete hulgas, siis tagasta selle võtme väärtus.

Seejärel suundume main.py faili tagasi.

  1. on_message meetod loeb igat sõnumit, mida kanalisse kirjutakse ja kõiki andmeid selle sõnumi kohta. Näiteks message.content annab sõnumi sisu, message.author sõnumi autor, message.channel sõnumi saatmise kanali jne. Kasuta message.content meetodit uurimaks, ega pole kirjutatud chatis response sõnastiku mõnda võtit. Kasuta if tingimust, saates sellisel juhul vastuse: await message.channel.send(?).

Testi discordis oma võtmeid sisestades!

🐶 4. ASCII koer

Järgmisena hakkame käske tegema. Kõikidele käskudele teeme eraldi klassi cogs kaustas, alustades dogs.py failist.

  1. Lisa uus käsk meetodi create_dog, mis loeb ASCII-kunsti dog failist.
  2. Kõigepealt on vaja kontrollida, kas fail dog eksisteerib ja lisa logimine juhuks, kui fail jääb leidmata. ctx.send sisse pane loetud faili andmed. ctx parameeter on sarnane message parameetriga main.py failis, temalt saab teada nii sõnumi autori, sisu, kanali ja lisaks saab temaga sõnumit saata ctx.send teel.
        try:
            with open("*failinimi siia*", "r") as file:
                content = file.read()
            await ctx.send(f"```{content}```")
        except Exception as e:
            print(f"Error loading dog art: {e}")
  1. setup meetodis anna botile kaasa add_cog meetod ning selle sisse omakorda klassinimi ja käsk. Sedamoodi saad botile käske lisada.

Nüüd peame taaskord main.py faili

  1. Lisame on_message meetodisse if tingimuse, juhuks kui chatis sõnum algab küsimärgiga. Käskude leidmiseks sõnumite seas on vaja eraldi client.process_commands(?) meetodit.
  2. Järgmisena lisa on_ready meetodisse cogs kausta klasside laadimine (kui pole veel kordagi allalaetud). Niimoodi saab bot kohe käivitudes käskudest aru.
for filename in os.listdir('./cogs'):
        if filename.endswith('.py'):
            extension = f'cogs.{filename[:-3]}'
            if extension not in client.extensions:
                try:
                    client.load_extension(extension)
                    print(f"Loaded extension: {extension}")
                except Exception as e:
                    print(f"Failed to load extension {extension}: {e}")

Testi discordis ?mouse pannes!

📜 5. Tsiteerimine

  1. Teine käsu teeme cogs kaustas quoting.py faili. Seal on vaja defineerida, et quotes.py failist get_quote meetodist saad tsitaadid.
  2. Samamoodi lisa ctx.send lause ning lisa botile setup meetodis klass ja meetod.
  3. Edasi minegi quotes.py faili main.py faili all ja kirjuta quotes järjendisse oma lemmiktsitaate. Eralda kõik tsitaadd komaga, muidu saad tekstibloki käsku ?quote chatis kirjutades.

Testi discordis ?quote pannes!

🔄 Extra

Kui oled kõik eelnevad ülesanded lahendanud, proovi teha järgmist:

  • Tase ⭐ Kui kasutaja sisestab roll_dice, tagasta suvaline arv. Seda saad response.py get_response meetodisse lisada.
Spoiler
def get_response(user_input: str) -> str:
    lowered: str = user_input.lower()
    if "roll dice" in lowered:
        return f":game_die: You rolled: {randint(1, 6)}"
    elif lowered in responses.keys():
        return responses[lowered]
  • Tase ⭐⭐ Lisa uus käsk !delete [@username], mida väljakutsudes bot teavitab:"[@username] has been permanently deleted. Goodbye forever. 👋"
Spoiler Leitav on_message meetodis message.author kasutades.
  • Tase ⭐⭐⭐ Lisa meetod, mis salvestab tekstifaili kõik, mida kasutajad sisestavad.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages