Вопрос Discord.py. Хочу сделать начисление валюты за нахождение в войсе.

Новичок
Статус
Оффлайн
Регистрация
18 Ноя 2021
Сообщения
1
Реакции[?]
0
Поинты[?]
0
Я начал программировать весьма недавно и код написал через костыли , но работает. Попробую кратко объяснить суть.
У меня есть bot.event который получает сколько времени я провел в войсе, есть команда с помощью которой можно сделать начисление валюты за проведенное в войсе время. Я хочу сделать что сразу после выхода из войса , без команды происходило начисление валюты.

Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Начинающий
Статус
Оффлайн
Регистрация
21 Мар 2021
Сообщения
95
Реакции[?]
29
Поинты[?]
7K
Сильно намудрил, вот тебе макет, тут счет начинается при подключении пользователя к голосовому каналу/ам, а заканчивается - как только тот выходит:

main.py:
import discord
import time

from discord.ext import commands

# Локальные импорты
from misc import *

# Константы, глобальные и статческие переменные
connected_users = dict()

client = commands.Bot(command_prefix="/", intents=discord.Intents().all())


# Обработчики событий
@client.event
async def on_ready() -> None:
    """Обработчик событий, срабатывает при инициализации бота"""

    current_time = get_current_time()
    color_print(f"[{current_time[0]}][{current_time[1]}] -> Бот запущен и готов к работе!", "green")


@client.event
async def on_voice_state_update(member: object, before: object, after: object) -> None:
    """Обработчик событий, срабатывает при обновлении голосового канала"""

    # Срабатывает при подключении пользователя к голосовому каналу
    in_voice_channel = member.voice
    if in_voice_channel and member not in connected_users.keys():
        connected_users[member] = time.time()

    # Срабатывает при отключении пользователя от голосового канала
    elif not in_voice_channel and member in connected_users.keys():
        # Получаем время пользователя, проведенное в голосовом канале и выписываем его
        print(f"{member.name} провел {time.time() - connected_users[member]} сек. в голосом(ых) каналах...")

        # Удаляем пользователя из словаря
        del connected_users[member]


client.run("token")
misc.py:
import colorama
import datetime

colorama.init(autoreset=True)


def color_print(output: str, color: str, end: str = "\n") -> None:
    """Выводит цветной текст в консоль"""

    exec(f"print(colorama.Fore.{color.upper()} + output, end=end)")


def get_current_time(raw: bool = False) -> list:
    """Возвращает лист с текущим временем [y, m, d, h, m, s], raw=True

    Возвращает лист с текущим временем [today, today_time], raw=False"""

    nowtime = str(datetime.datetime.now()).split(" ")

    today = nowtime[0].split("-")
    today_time = nowtime[1].split(".")[0].split(":")

    return [*today, *today_time] if raw else [nowtime[0], nowtime[1].split(".")[0]]
Пример:


P.S. Очевидно, что там, где у меня стоит вывод(36 строка кода) уже пишешь логику (запросы в БД и пр.)
 
Последнее редактирование:
Сверху Снизу