gesbod/gesmain.py
2024-04-13 22:45:41 +02:00

100 lines
4.2 KiB
Python

import discord, csv, os
from discord import app_commands
from discord.ext import commands
bot = commands.Bot(command_prefix="&", intents = discord.Intents.all())
#
#
#
async def zapis_info_hadanka(guild_id, aktivni, zadavetel_id, fraze, zkratka):
with open(f"guild_data/guild_{guild_id}.csv", 'w', newline='') as csvfile:
fieldnames = ['aktivni', 'zadavatel_id', 'fraze', 'zkratka']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerow({'aktivni': aktivni, 'zadavatel_id': zadavetel_id, 'fraze': fraze, 'zkratka': zkratka})
async def precti(guild_id, klic):
with open(f'guild_data/guild_{guild_id}.csv', newline='') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
return str(row[str(klic)])
#
#
#
@bot.event
async def on_ready():
print(f"[ONREADY] logged in as: {bot.user}")
try:
synced = await bot.tree.sync()
print(f"[ONREADY] synced {len(synced)} command(s)")
except Exception as e:
print(e)
#
#
#
#zadat hadanku serveru
@bot.tree.command(name="makeriddle")
@app_commands.describe(riddle = "few words from which I will make abbreviation for others to guess") #parametr commandu
async def makeriddle(interaction: discord.Interaction, riddle: str):
guildid = interaction.guild_id
if os.path.exists(f'guild_data/guild_{guildid}.csv') == False:
await zapis_info_hadanka(guildid, "ne", "", "", "")
if await precti(guildid, "fraze") != "":
pzkratka = await precti(guildid, 'zkratka')
riddle_author = (bot.get_guild(guildid)).get_member(int(await precti(guildid, "zadavatel_id")))
await interaction.response.send_message(f"Abbreviation already set ({pzkratka}) by {riddle_author.nick}", ephemeral=True)
if await precti(guildid, 'aktivni') == "ne" and await precti(guildid, "fraze") == "":
zkratka = "".join(list(w[0].upper() for w in riddle.split(' ')))
await zapis_info_hadanka(guildid, "ano", interaction.user.id, riddle, zkratka)
await interaction.response.send_message(f"you have set the riddle to: **{riddle}**, you can end the guessing using /end", ephemeral=True)
print(f"[MAKERIDDLE] in guild {guildid} user {interaction.user.id} set riddle to: {riddle}")
await interaction.channel.send(f"{interaction.user.nick} have set a new abbreviation to solve: **{zkratka}**! you can guess using /guess")
@bot.tree.command(name="guess")
@app_commands.describe(meaning = "The meaning of the abbreviation")
async def guess(interaction: discord.Interaction, meaning: str):
guildid = interaction.guild_id
if os.path.exists(f'guild_data/guild_{guildid}.csv') == False:
await interaction.response.send_message("there is no file for this server yet, you can be the first one to use the bot on this server by running /makeriddle", ephemeral=True)
else:
aktivni = str(await precti(guildid, 'aktivni'))
if aktivni == "ano":
solution = await precti(guildid, "fraze")
riddle_author = (bot.get_guild(guildid)).get_member(int(await precti(guildid, "zadavatel_id")))
if interaction.user.id == riddle_author.id:
await interaction.response.send_message("you cant guess your own riddle!", ephemeral=True)
if aktivni == "ano" and solution.lower() != meaning.lower() and interaction.user.id != riddle_author.id:
await interaction.response.send_message(f"{interaction.user.nick}'s guess **({meaning})** is incorrect!")
if aktivni == "ano" and solution.lower() == meaning.lower() and interaction.user.id != riddle_author.id and os.path.exists(f'guild_data/guild_{guildid}.csv') == True:
await interaction.response.send_message(f"{interaction.user.nick} have succesfully guessed {riddle_author.nick}'s riddle **({solution.lower()})**")
await zapis_info_hadanka(guildid, "ne", "", "", "")
elif aktivni == "ne":
await interaction.response.send_message("there is nothing to guess, you can make others guess your abbreviation using /makeriddle", ephemeral=True)
#
#
#
TOKEN = open("gesbod_token.txt", 'r').read()
bot.run(TOKEN)