es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo enviar un mensaje sin un comando?

Quiero enviar un mensaje sin comando si una condición es verdadera. Escribí este código pero no envía ningún mensaje.

from discord import channel
from discord.ext import commands
from time import sleep

bot = commands.Bot(command_prefix='.')
token = '*'
condition = True

@bot.event
async def on_ready():
    print('crypto-bot está listo')

@bot.event
async def on_message(message):
    if message.author == bot.user:
        return
    if message.content == '.ciao':
        await message.channel.send('ciao')

async def mi_tarea_de_fondo():
    if condition == True:
        channel = bot.get_channel(926067178539712512)
        await channel.send('verdadero')

bot.run(token)
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El código parece tener una tarea en segundo plano llamada my_background_task, pero no se está llamando ni programando para que se ejecute periódicamente. Para enviar un mensaje sin un comando, puedes agregar una llamada a la función my_background_task al final de la función on_ready o crear un bucle para ejecutar la función de forma periódica. Aquí tienes un ejemplo de cómo llamar a la función una vez al iniciar:

    from discord import channel
    from discord.ext import commands
    from time import sleep
    
    bot = commands.Bot(command_prefix='.')
    token = '***'
    condition = True
    
    @bot.event
    async def on_ready():
        print('crypto-bot está listo')
        await my_background_task()  # llama a la función al iniciar
    
    @bot.event
    async def on_message(message):
        if message.author == bot.user:
            return
        if message.content == '.ciao':
            await message.channel.send('ciao')
    
    async def my_background_task():
        if condition == True:
            channel = bot.get_channel(926067178539712512)
            await channel.send('true')
    
    bot.run(token)
    

    Esto enviará un mensaje al canal especificado cuando el bot se inicie y la condición sea verdadera. Sin embargo, si quieres que el mensaje se envíe periódicamente, puedes usar un bucle asyncio de la siguiente manera:

    import asyncio
    
    async def my_background_task():
        await bot.wait_until_ready()  # espera hasta que el bot esté listo
        while True:
            if condition == True:
                channel = bot.get_channel(926067178539712512)
                await channel.send('true')
            await asyncio.sleep(3600)  # espera una hora antes de volver a verificar la condición
    
    bot.loop.create_task(my_background_task())  # programa la tarea para que se ejecute en segundo plano
    bot.run(token)
    

    Esto enviará un mensaje al canal especificado cada hora siempre que la condición sea verdadera. Ten en cuenta que tendrás que importar asyncio para que esto funcione.

Comments are closed.