Как я могу исправить ошибку в discord.py с помощью циклов (в задачах)?Python

Программы на Python
Anonymous
Как я могу исправить ошибку в discord.py с помощью циклов (в задачах)?

Сообщение Anonymous »

Если я запущу бота Discord, у меня появится такая ошибка:

Код: Выделить всё

Traceback (most recent call last):File "c:\Users\progi\Documents\GitHub\discord_bot\main.py", line 221, in bot.add_cog(MyCog(bot))^^^^^^^^^^File "c:\Users\progi\Documents\GitHub\discord_bot\main.py", line 207, in initself.check_empty_channels.start()File "C:\Users\progi\AppData\Local\Programs\Python\Python312\Lib\site-packages\discord\ext\tasks_init_.py", line 398, in startself._task = asyncio.create_task(self._loop(*args, **kwargs))^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "C:\Users\progi\AppData\Local\Programs\Python\Python312\Lib\asyncio\tasks.py", line 417, in create_taskloop = events.get_running_loop()^^^^^^^^^^^^^^^^^^^^^^^^^RuntimeError: no running event loopsys:1: RuntimeWarning: coroutine 'Loop._loop' was never awaited
Я запускаю своего бота с помощью этого кода (discord.py):

Код: Выделить всё

import os
import discord
import discord.ui
from worlds import *
from vars import *
from lists import *
from rule_checker import *
from discord.ext import commands, tasks
from discord import app_commands
from discord import ActionRow, Button, ButtonStyle
from discord.utils import get
import asyncio

from env import *

intents = discord.Intents.all()
bot = commands.Bot(command_prefix='!', intents=intents, test_guilds=[1238156026054705182])  # Префикс для команд
client = discord.Client(intents=intents)
tree = bot.tree

error_embed = discord.Embed(description="У вас недостаточно прав на это действие!", color=embed_color)

#TOKEN = os.getenv("TOKEN")

class Dropdown(discord.ui.Select):
def __init__(self):
options = [
#discord.SelectOption(label=" » Асгард", value=str(roleid3), emoji="🕊️"),
discord.SelectOption(label=" » Альвхейм", value=str(roleid1), emoji="🧚‍♂️"),
discord.SelectOption(label=" » Мидгард", value=str(roleid2), emoji="🏃"),
discord.SelectOption(label=" ∥ Муспельхейм", value=str(roleid4), emoji="🔥"),
discord.SelectOption(label=" ∥ Ванахейм", value=str(roleid5), emoji="🔮"),
discord.SelectOption(label=" ∥ Йотунхейм", value=str(roleid6), emoji="🦣"),
discord.SelectOption(label=" ∥ Свартальвхейм", value=str(roleid7), emoji="⚒️"),
discord.SelectOption(label=" ∥ Нифльхейм", value=str(roleid8), emoji="☁️"),
discord.SelectOption(label=" ∥ Хельхейм", value=str(roleid9), emoji="🧊")
]

super().__init__(placeholder="Выберите свой сервер",options=options)

async def callback(self, inter: discord.Interaction):
# Получаем пользователя, который выбрал опцию
member = inter.user

# Получаем ID роли из выбранной опции
role_id = int(self.values[0])

# Получаем роль по ID
role = inter.guild.get_role(role_id)

# Проверяем роль по доступным серверами к игре
if role_id == 1238473654585786369 or role_id == 1238473033707028582:
# Проверяем, есть ли у пользователя указанная роль
if role in member.roles:
# Если роль есть, убираем ее
await member.remove_roles(role)
await inter.response.send_message(f"> ❌ Роль  была убрана.", ephemeral=True)
else:
# Если роли нет, выдаем ее
await member.add_roles(role)
await inter.response.send_message(f"> ✅ Роль  была выдана.", ephemeral=True)
else:
await inter.response.send_message(f">  ⚠️ Эта роль недоступна для вас!", ephemeral=True)

class DropdownView(discord.ui.View):
def __init__(self):
super().__init__()
self.add_item(Dropdown())

class MyView1(discord.ui.View):
@discord.ui.button(label="Асгард", style=discord.ButtonStyle.blurple, emoji="🕊️")
async def second_button_callback(self, interaction, button):
await interaction.response.send_message(embed=world2, ephemeral=True)

@discord.ui.button(label="Альвхейм", style=discord.ButtonStyle.blurple, emoji="🧚‍♂️")
async def first_button_callback(self, interaction, button):
await interaction.response.send_message(embed=world1, ephemeral=True)

@discord.ui.button(label="Мидгард", style=discord.ButtonStyle.blurple, emoji="🏃")
async def five_button_callback(self, interaction, button):
await interaction.response.send_message(embed=world5, ephemeral=True)

@discord.ui.button(label="Муспелльхейм", style=discord.ButtonStyle.gray, emoji="🔥")
async def six_button_callback(self, interaction, button):
await interaction.response.send_message(embed=world6, ephemeral=True)

@discord.ui.button(label="Ванахейм", style=discord.ButtonStyle.gray, emoji="🔮")
async def tree_button_callback(self, interaction, button):
await interaction.response.send_message(embed=world3, ephemeral=True)

@discord.ui.button(label="Йотунхейм", style=discord.ButtonStyle.gray, emoji="🦣")
async def four_button_callback(self, interaction, button):
await interaction.response.send_message(embed=world4, ephemeral=True)

@discord.ui.button(label="Свартальвхейм", style=discord.ButtonStyle.gray, emoji="⚒️")
async def eight_button_callback(self, interaction, button):
await interaction.response.send_message(embed=world8, ephemeral=True)

@discord.ui.button(label="Нифльхейм", style=discord.ButtonStyle.gray, emoji="☁️")
async def seven_button_callback(self, interaction, button):
await interaction.response.send_message(embed=world7, ephemeral=True)

@discord.ui.button(label="Хельхейм", style=discord.ButtonStyle.gray, emoji="🧊")
async def nine_button_callback(self, interaction, button):
await interaction.response.send_message(embed=world9, ephemeral=True)

@bot.event
async def on_ready():
print(f'Logged in as {bot.user.name} ({bot.user.id})')

await bot.change_presence(activity=discord.Activity(type=discord.ActivityType.playing, name='scandworld.fun'))

channel_with_buttons = bot.get_channel(1238168631091925012)
async for message in channel_with_buttons.history(limit=None):
await message.delete()
if channel_with_buttons:

# Отправляем сообщение с кнопками
embed1 = discord.Embed(description='## Добро пожаловать в раздел миров! \n```Здесь вы можете почитать полезную информацию о всех существующих мирах нашего сервера.```\n *Для того, чтобы узнать о мирах подробнее, нажмите на кнопку.*', color=embed_color)
await channel_with_buttons.send(embed=embed1, view=MyView1())
else:
print(f"Канал {channel_with_buttons} не найден.")

channel_with_roles = bot.get_channel(1238168344000073802)
async for message in channel_with_roles.history(limit=None):
await message.delete()
if channel_with_roles:

# Отправляем сообщение с кнопками
embed2 = discord.Embed(description='## Добро пожаловать в раздел ролей \n```Здесь вы можете получить роль любого мира, выбрав его из меню!``` \n*Выбор роли может помочь найти друзей для игры в вашем мире или помочь найти помощь!*', color=embed_color)
await channel_with_roles.send(embed=embed2, view=DropdownView())
else:
print(f"Канал {channel_with_roles} не найден.")

@bot.command()
async def написать(ctx, *, text=None):
# Отправляем сообщение от имени бота в тот же чат

for role_id in moder_roles:
role = discord.utils.get(ctx.author.roles, id=role_id)
if role:

await ctx.send(text)
await ctx.message.delete()
return
else:
await ctx.send(embed=error_embed, delete_after=delete_time)
return

@bot.command()
async def панелька(ctx, *, text=None):
for role_id in moder_roles:
role = discord.utils.get(ctx.author.roles,  id=role_id)
if role:
# Создаем Embed (панель) с кастомным цветом
embed = discord.Embed(description=text, color=embed_color)  # Зеленый цвет

# Прикрепляем изображение (если оно есть)
if ctx.message.attachments:
image_url = ctx.message.attachments[0].url
embed.set_image(url=image_url)  # Отображаем GIF как анимацию

# Отправляем Embed от имени бота в тот же чат
await ctx.send(embed=embed)
await ctx.message.delete()
return
else:
await ctx.send(embed=error_embed, delete_after=delete_time)
return

@bot.command(description="Информация о сервере")
async def инфо(ctx):
# Отправляем сообщение только автору команды
server = ctx.guild
total_members = server.member_count
online_members = sum(member.status == discord.Status.online for member in server.members)

text = f'## Информация о {server} \n Айпи сервера: `scandworld.fun` \n Участников: `{total_members}` \n Онлайн: `{online_members}` \n\n## Полезные каналы \n Прочитайте правила:  \n Выберите себе роль:  \n Следите за новостями:  \n\n *Связь с администрацией:* '

embed = discord.Embed(description=text, color=embed_color)
# Закомментировал удаление сообщения
await ctx.send(embed=embed) #, delete_after=delete_time)
#await ctx.message.delete()

@bot.command(description="Создать голосовой канал")
async def гс(ctx, channel_name="Г2С111", max_members=2):
# Получаем сервер
server = ctx.guild

category = discord.utils.get(server.categories, id=category_id1)

if channel_name == "Г2С111":
await ctx.send(f"Нельзя создать канал без имени!")
else:

# Создаем голосовой канал с указанным именем и максимальным количеством участников в указанной категории
channel = await server.create_voice_channel(channel_name, user_limit=max_members, category=category)

await ctx.send(f"Голосовой канал '{channel.name}' с максимальным количеством участников {max_members}.")

class MyCog(commands.Cog):
def __init__(self, bot):
self.bot = bot
self.check_empty_channels.start()

@tasks.loop(minutes=5)
async def check_empty_channels(self):
# Замените на ID вашей категории
category = self.bot.get_channel(category_id1)

for channel in category.voice_channels:
if len(channel.members) == 0:
await channel.delete()

@check_empty_channels.before_loop
async def before_check_empty_channels(self):
await self.bot.wait_until_ready()
bot.add_cog(MyCog(bot))

# Запускаем бота с вашим токеном
bot.run(TOKEN)

Я использовал какие-то строки кода, но не знаю, почему это не работает. Просматриваю любые посты, но не нахожу никакой информации. Я ищу дополнительную информацию с помощью второго пилота, но он не дал мне полезной информации.
Что мне попробовать дальше?

Подробнее здесь: https://stackoverflow.com/questions/784 ... s-in-tasks

Вернуться в «Python»