Discord.py , получение повторяющихся сообщений в cogs

#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