mirror of
https://github.com/kurbezz/discord-bot.git
synced 2025-12-06 15:15:37 +01:00
Rewrite to python
This commit is contained in:
98
src/services/discord.py
Normal file
98
src/services/discord.py
Normal file
@@ -0,0 +1,98 @@
|
||||
import discord
|
||||
from discord.abc import Messageable
|
||||
from discord import Object
|
||||
from discord import app_commands
|
||||
|
||||
from services.games_list import GameList, GameItem
|
||||
|
||||
from config import config
|
||||
|
||||
|
||||
class DiscordClient(discord.Client):
|
||||
def __init__(self) -> None:
|
||||
intents = discord.Intents.default()
|
||||
intents.message_content = True
|
||||
|
||||
super().__init__(intents=intents)
|
||||
|
||||
self.tree = app_commands.CommandTree(self)
|
||||
|
||||
async def on_ready(self):
|
||||
await self.change_presence(
|
||||
activity=discord.Game(config.DISCORD_BOT_ACTIVITY),
|
||||
status=discord.Status.online,
|
||||
)
|
||||
|
||||
|
||||
client = DiscordClient()
|
||||
|
||||
|
||||
@client.tree.command(guild=Object(id=config.DISCORD_GUILD_ID))
|
||||
@app_commands.describe(
|
||||
category="Раздел",
|
||||
customer="Кто заказал",
|
||||
game="Игра",
|
||||
date="Дата заказа"
|
||||
)
|
||||
@app_commands.choices(
|
||||
category=[
|
||||
app_commands.Choice(name="Заказ за баллы", value="points"),
|
||||
app_commands.Choice(name="Проплачены", value="paids"),
|
||||
app_commands.Choice(name="Подарки", value="gifts"),
|
||||
],
|
||||
)
|
||||
async def add(
|
||||
interaction: discord.Interaction,
|
||||
category: str,
|
||||
customer: str,
|
||||
game: str,
|
||||
date: str | None = None
|
||||
):
|
||||
if interaction.channel is None or interaction.channel.id != config.DISCORD_CHANNEL_ID:
|
||||
return
|
||||
|
||||
if not isinstance(interaction.channel, Messageable):
|
||||
return
|
||||
|
||||
game_list_message = await interaction.channel.fetch_message(config.DISCORD_GAME_LIST_MESSAGE_ID)
|
||||
|
||||
game_list = GameList.parse(game_list_message.content)
|
||||
game_list.add_game(category, GameItem(name=game, customer=customer, date=date))
|
||||
|
||||
await game_list_message.edit(content=str(game_list))
|
||||
|
||||
|
||||
async def game_list_autocomplete(
|
||||
interaction: discord.Interaction,
|
||||
current: str,
|
||||
) -> list[app_commands.Choice[str]]:
|
||||
if not isinstance(interaction.channel, Messageable):
|
||||
return []
|
||||
|
||||
game_list_message = await interaction.channel.fetch_message(config.DISCORD_GAME_LIST_MESSAGE_ID)
|
||||
|
||||
game_list = GameList.parse(game_list_message.content)
|
||||
|
||||
return game_list.get_choices(current)
|
||||
|
||||
|
||||
@client.tree.command(guild=Object(id=config.DISCORD_GUILD_ID))
|
||||
@app_commands.describe(game="Игра")
|
||||
@app_commands.autocomplete(game=game_list_autocomplete)
|
||||
async def delete(interaction: discord.Interaction, game: str):
|
||||
if interaction.channel is None or interaction.channel.id != config.DISCORD_CHANNEL_ID:
|
||||
return
|
||||
|
||||
if not isinstance(interaction.channel, Messageable):
|
||||
return
|
||||
|
||||
game_list_message = await interaction.channel.fetch_message(config.DISCORD_GAME_LIST_MESSAGE_ID)
|
||||
|
||||
game_list = GameList.parse(game_list_message.content)
|
||||
game_list.delete_game(game)
|
||||
|
||||
await game_list_message.edit(content=str(game_list))
|
||||
|
||||
|
||||
async def start_discord_sevice():
|
||||
client.run(config.DISCORD_BOT_TOKEN)
|
||||
Reference in New Issue
Block a user