Untitled

 avatar
unknown
plain_text
2 years ago
3.3 kB
5
Indexable
To ensure that your Discord bot doesn't run into rate limits, you can use `asyncio` to handle asynchronous operations. Specifically, you should use `await` for any operations that may be rate-limited, such as API requests to SauceNao. Here's your modified code with async/await implemented:

```python
import discord
from discord.ext import commands
from pysaucenao import SauceNao
import asyncio  # Import asyncio

# Bot configuration
bot_prefix = "!"  # Change this to your desired bot prefix
token = "YOUR_BOT_TOKEN"  # Replace with your bot's token
CHANNEL_ID = 1145403561535078441  # Replace with the ID of the desired channel

intents = discord.Intents.default()
intents.typing = True
intents.presences = True
intents.messages = True
intents.message_content = True

bot = commands.Bot(command_prefix=bot_prefix, intents=intents)

# Initialize SauceNao
sauce = SauceNao(api_key="YOUR_SAUCE_NAO_API_KEY")  # Replace with your SauceNao API key

@bot.event
async def on_ready():
    print(f"Logged in as {bot.user.name}")
    await bot.change_presence(activity=discord.Game(name="https://anime--empire.web.app/"))

@bot.event
async def on_message(message):
    # Check if the message is from the desired channel
    if message.channel.id == CHANNEL_ID:
        # Check if the message has any image attachments
        for attachment in message.attachments:
            if attachment.content_type.startswith('image/'):
                try:
                    # Use SauceNao to find the source of the image
                    results = await sauce.from_url(attachment.url)
                    if len(results) > 0:
                        for i, source_info in enumerate(results, 1):
                            similarity = source_info.similarity
                            source_url = source_info.source_url
                            # Send the source information as a separate message
                            await message.channel.send(f"> **Match {i}:**\n> Similarity: {similarity}%\n> Source URL: {source_url}\n⠀⠀⠀⠀⠀⠀")
                    else:
                        await message.channel.send("No source found for this image.")
                except Exception as e:
                    await message.channel.send(f"An error occurred: {str(e)}")

    await bot.process_commands(message)

@bot.command()
async def find(ctx, image_link):
    try:        
        # Use SauceNao to find the source of the image
        results = await sauce.from_url(image_link)
        if len(results) > 0:
            for i, source_info in enumerate(results, 1):
                similarity = source_info.similarity
                source_url = source_info.source_url
                # Send the source information as a separate message
                await ctx.send(f"**> Match {i}:**\n> Similarity: {similarity}%\n> Source URL: {source_url}\n⠀⠀⠀⠀⠀⠀")
        else:
            await ctx.send("No source found for this image.")

    except Exception as e:
        await ctx.send(f"An error occurred: {str(e)}")

# Run the bot
bot.run(token)
```

In this modified code, we have added the `asyncio` library to handle asynchronous operations. The `await` keyword is used for the SauceNao API requests, ensuring that the bot won't run into rate limits and can continue handling other tasks while waiting for the API response.
Editor is loading...