#python #discord #discord.py
#python #Discord #discord.py
Вопрос:
Итак, я недавно переместил все свои discord.py код бота разбит на разные винтики. Но некоторые из них не работают, и большинство из них отправляют повторяющиеся сообщения / вставки каждый раз, когда они используются.
Я не уверен, как это исправить, поэтому я спрошу кого-нибудь умнее меня.
Пример: команда Giveaway:
import discord
from discord.ext import commands
import asyncio
import random
import time
class GiveawayCog(commands.Cog):
def __init__(self, client):
self.client = client
self._last_member = None
@commands.command()
async def giveaway(self, ctx, timee, group: discord.Role, *, prize):
seconds = 0
counter = 0
user = discord.Member
role = discord.utils.find(lambda r: r.name == group, ctx.guild.roles)
for i in timee:
if i.lower().endswith("d"):
seconds = int(timee[:-1]) * 60 * 60 * 24
counter = f"{seconds // 60 // 60 // 24} days"
if i.lower().endswith("h"):
seconds = int(timee[:-1]) * 60 * 60
counter = f"{seconds // 60 // 60} hours"
elif i.lower().endswith("m"):
seconds = int(timee[:-1]) * 60
counter = f"{seconds // 60} minutes"
elif i.lower().endswith("s"):
seconds = int(timee[:-1])
counter = f"{seconds} seconds"
winner = None
giveawayembed = discord.Embed(
title="🎉 New Giveaway! 🎉",
colour=discord.Color.green()
)
giveawayembed.add_field(name="Prize:", value="{}".format(prize), inline=False)
giveawayembed.add_field(name="Hosted by:", value=f"{ctx.author.mention}", inline=False)
giveawayembed.add_field(name="Ends in:", value=f"{counter}")
giveawayembed.add_field(name="Role required:", value=f"{group}")
msg = await ctx.send(embed=giveawayembed)
await msg.add_reaction("🎉")
await asyncio.sleep(seconds)
message = await ctx.fetch_message(msg.id)
users = await message.reactions[0].users().flatten()
users.pop(users.index(ctx.guild.me))
users.pop(users.index(ctx.author))
winner = random.choice(users)
if winner.has_roles(role) is False:
winner = random.choice(users)
else:
winner = random.choice(users)
await ctx.send(f"**Congrats {winner.mention}!**nPlease contact {ctx.author.mention} about your prize.")
def setup(client):
client.add_cog(GiveawayCog(client))
Ошибка:
Ошибка 2:
discord.ext.commands.ошибки.CommandInvokeError: команда вызвала исключение: Ошибка индекса: невозможно выбрать из пустой последовательности
(Эта ошибка возникает, даже если я реагирую на сообщение)
Спасибо за любую помощь, это ценится! : D Также здесь приведена документация для Discord.py : https://discordpy.readthedocs.io/en/latest /
Комментарии:
1. вы уверены, что у вас запущен только один экземпляр бота / команды только в одном месте?
2. Я действительно думаю, что вы, вероятно, выполняете команды в двух разных местах одновременно, я просто скопировал и протестировал ваш код, и он не повторялся
3. Убедитесь, что у вас нет
bot.process_comands(message)
где-то дважды. Вам не нужно иметь его в прослушивателях cogs. Кроме того,role = discord.utils.find(lambda r: r.name == group, ctx.guild.roles)
не будет работать в этом коде.group
discord.Role
в этот момент уже будет a, так что этоfind
всегда будет возвращатьNone
4. Я буквально перезагрузил свой компьютер, потому что думал, что у меня запущено 2 экземпляра …, хммм.
5. Кроме того, я провел еще несколько тестов, и когда я не реагирую на встраивание, я получаю эту ошибку:
line 49, in giveaway users.pop(users.index(ctx.author)) ValueError: <Member id={my member id} name='Dromera555' discriminator='{my discriminator}' bot=False nick=None guild=<Guild id={the test server} name='TEST SERVER' shard_id=None chunked=False member_count=2>> is not in list
…