A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Cancel Create
discord-py-guide / tasks.md
- Go to file T
- Go to line L
- Copy path
- Copy permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Cannot retrieve contributors at this time
70 lines (51 sloc) 4.2 KB
- Open with Desktop
- View raw
- Copy raw contents Copy raw contents Copy raw contents
Copy raw contents
Иногда возникает необходимость выполнять какую-либо задачу с определенным временным интервалом. Например, каждые X секунд/минут/часов сохранять какие-то данные или проверять какие-нибудь условия.
Чтобы не заморачиваться с циклом и задержками в коде самостоятельно, можно просто использовать функционал модуля discord.ext.tasks .
Using Cogs and embedded messages — Making a simple bot in Discord.py 2.0 — Part 3
Создадим задачу, которая каждые 10 секунд выводит в консоль пользователей, находящихся в голосовом канале.
Для начала подключим модуль:
from discord.ext import tasks
- seconds : int / float — количество секунд, между итерациями выполнения задачи
- minutes : int / float — количество минут, между итерациями выполнения задачи
- hours : int / float — количество часов, между итерациями выполнения задачи
Также можно передать:
- time : datetime.time — точное время запуска задачи
- count : int — сколько раз необходимо выполнить задачу
Создадим функцию и в декораторе укажем интервал в 10 секунд:
Теперь прописываем логику функции:
Теперь, задачу нужно запустить. Многие забывают это сделать и потом довольно часто возникает вопрос о том, почему же правильно прописанная задача не работает (Подробный разбор проблемы)
Задачу нужно запускать тогда, когда бот полностью готов к работе. А для этого, как нельзя лучше, подходит обработчик события on_ready() . Почитать про него можно здесь.
В результате должен получиться примерно такой код.
А в консоль каждые 10 секунд будет выводиться информация примерно следующего содержания:
Название сервера dennys ( Название голосового канала)
Источник: github.com
Как сделать цикл в discord.py переписать?
Бот должен что-то делать каждые 60 секунд. Я пытался использовать create_task, но он не работает (бот запустился, но ничего не произошло). Как это можно реализовать?
спросил(а) 2019-02-02T20:38:00+03:00 4 года, 4 месяца назад
добавить комментарий
пожаловаться
client.loop.create_task должен по-прежнему нормально работать с версией rewrite . Пример фоновой задачи в rewrite версии можно найти здесь.
from discord.ext import commands
Python: Making a Discord bot (Part 7: Cogs)
import asyncio
client = commands.Bot(command_prefix=’!’)
async def background_task():
await client.wait_until_ready()
counter = 0
channel = client.get_channel(123456) # Insert channel ID here
while not client.is_closed():
counter += 1
await channel.send(counter)
await asyncio.sleep(10)
client.loop.create_task(background_task())
client.run(‘token’)
ответил(а) 2019-02-03T12:19:00+03:00 4 года, 4 месяца назад
добавить комментарий
пожаловаться
Еще в рубрике
Discord.py Переписать — Как я могу получить разрешения пользователя в виде списка?
Discord.py переписать бот не работает в heroku, но работает локально
Как установить discord.py переписать?
on_member_update получение роли добавлено/удалено имя
Другие вопросы
Как я могу создать стиль для встраивания, чтобы взять его заголовок, описание и эскиз с определенной веб-страницы
Источник: progi.pro
Как использовать цикл в discord.py?
Эта команда позволяет пользователю выбрать, из скольких команд он хочет создать таблицу лидеров. Цикл для всех команд работает, но мне нужно что-то, что также показывало бы результат в цикле. Я хочу, чтобы он отправлял общие очки каждой команде, в которую вошел пользователь. Теперь он просто отправляет точки первого входа.
user13878676 23 авг ’20 в 13:05 2020-08-23 13:05
2020-08-23 13:05
2 ответа
Вы можете использовать вставку, чтобы она выглядела красиво. Я добавил две функции, которые вам следует использовать.
user13975447 23 авг ’20 в 13:40 2020-08-23 13:40
2020-08-23 13:40
Было бы неплохо создать командный класс, у которого были бы определенные атрибуты, такие как название команды, количество убийств, позиции и т. Д. Затем вы могли бы добавить все команды в массив или список, а затем просмотреть их, чтобы создать списки лидеров. и другие полезные функции.
Я рекомендую это видео на YouTube, в котором подробно рассказывается, как работает объектно-ориентированное программирование (ООП) в Python: https://www.youtube.com/watch?v=MikphENIrOo
Ваш командный класс может выглядеть примерно так:
Class Team: def __init__(name, kills, points): self.name = name self.kills = kills self.points = points
Тогда у вас может быть список
teams = []
и вы можете добавить в этот список любое количество команд, которое хочет пользователь
teams.append(Team(BestTeam, 10, 50))
Источник: stackru.com