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!
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
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.
Liigu faili response.py
- 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.
- 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.
- 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!
Järgmisena hakkame käske tegema. Kõikidele käskudele teeme eraldi klassi cogs kaustas, alustades dogs.py failist.
- Lisa uus käsk meetodi create_dog, mis loeb ASCII-kunsti dog failist.
- 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}")
- 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
- 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.
- 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!
- Teine käsu teeme cogs kaustas quoting.py faili. Seal on vaja defineerida, et quotes.py failist get_quote meetodist saad tsitaadid.
- Samamoodi lisa ctx.send lause ning lisa botile setup meetodis klass ja meetod.
- 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!
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.