如果我运行我的不和谐机器人,我会遇到此错误:
Traceback (most recent call last):File "c:\Users\progi\Documents\GitHub\discord_bot\main.py", line 221, in <module>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"> ❌ Роль <@&{role.id}> была убрана.", ephemeral=True)
else:
# Если роли нет, выдаем ее
await member.add_roles(role)
await inter.response.send_message(f"> ✅ Роль <@&{role.id}> была выдана.", 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 Прочитайте правила: <#1238162480996286534> \n Выберите себе роль: <#1238168344000073802> \n Следите за новостями: <#1238481357676478536> \n\n *Связь с администрацией:* <#1238191924502990959>'
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)
我使用了任何代码行,但我不知道为什么这不起作用
我检查了所有帖子,但没有找到必要的信息
请帮助我!我和副驾驶搜索更多信息,但他没有给我需要我的信息
作为discord.py v2.0 中 asyncio 的扩展更改,扩展和 cogs 的加载和卸载现在是异步的(了解更多)。 这样,您将需要在异步上下文中加载
MyCog
,如下所示:
import asyncio
# ...
async def main():
async with bot:
await bot.add_cog(MyCog(bot))
await bot.start('TOKEN')
asyncio.run(main())
asyncio.run()
函数会自动为您创建一个循环,这可以防止启动任务时发生RuntimeError: no running event loopsys
错误。