Найти - Пользователи
Полная версия: вызвать команду бота модулем
Начало » Python для новичков » вызвать команду бота модулем
1 2 3
Genabox
привет подскажите пожалуйста как тут вызвать команду из модуля
 @bot.command(name='hi3')
async def SendMessage(ctx):
    await weatherV(ctx)

Из дискорда команда hi3 вызывает weatherV

как эту команду послать модулем?
потому что package.discordbot.discordbot.weatherV(ctx)
выдает ошибку
d:\discord\package\tray\traymenu.py:54: RuntimeWarning: coroutine ‘Command.__call__’ was never awaited
package.discordbot.discordbot.weatherV(ctx)
RuntimeWarning: Enable tracemalloc to get the object allocation traceback

где тут этот await прописывать?

         elif menu_item == 'test':
            print('test pushed')
            async def endMessagehi(ctx):
                await package.discordbot.discordbot.weatherV(ctx)
функция не вызвается из другого модуля
Genabox
module a
 def testA(ctx):
    async def SendMessagehi(ctx):
        await weatherV(ctx)
    SendMessagehi(ctx)

module b
         elif menu_item == 'test':
            print('test pushed')
            
            package.discordbot.discordbot.testA(ctx)
вызываемая функуия из модуля “A” соответственно модулем “B” приводит к такой ошибке
d:\discord\package\discordbot\discordbot.py:101: RuntimeWarning: coroutine ‘testA.<locals>.SendMessagehi’ was never awaited
SendMessagehi(ctx)
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
в чем моя ашибка?

========================
 def testA(ctx):
    async def SendMessagehi(ctx):
        await weatherV(ctx)
        await SendMessagehi(ctx)
так ошибки не пигет но и не запускает функцию…
=========================
функцию запускает (пишет принт из нее )
но в дискорд текст который должен был быть отправлен не отправляется….и не пишет ошибок
==============================
 def testA():
        ctx='weatherV'
        weatherV(ctx)
  
        print('test_______________A')
weatherV отправляет погодный текств дискорд
если ее вызвать из консоли дискорда то работает
а при вызове из модуля пишет только принт test_______________A а сама погодная функция молчит

что тут можео сделать?
===================
         elif menu_item == 'test':
            print('test pushed')
            async def test(ctx):
                await weatherV(ctx)
            test(ctx)
так тоже ничего
функция weatherV молчит и пиринт даже не выдает
Genabox
 import invoke
def testA():
        c = invoke.context
        print('test_______________A')
        c.Context.run(command='weatherV')

есть идеи??
Genabox
help, i need help!
xam1816
Genabox
help, i need help!
В каком месте кода запускается асинхронная функция?
Genabox
Опривет сенкс что откликнулся
у меня есть обычный nextcord bot,
 @bot.event
async def on_ready():
    print(f"@ === -- Bot succesfull logined at: {bot.user.name} -- === @")
@bot.command(name='hi')
async def SendMessagehi(ctx):
    await ctx.send('Hello')
bot.run(token)

самый простой бот
моя задача из соседнего модуля постать в дискорд чат ‘Hello’ тоесть запустить вот это @bot.command(name='hi'), соответственно я потом переделаю под остальные фенуции

мне сказали делать это через инвок

mean, either use Bot.invoke (or Context.invoke) or move the function of the command into a function and import it to wherever else you need to use it

это мануал
https://discordpy.readthedocs.io/en/latest/ext/commands/api.html#discord.ext.commands.Context.invoke
а это типа пример уже готового

 async def invoke(self, ctx: Context[BotT], /) -> None:
    await self.prepare(ctx)
    # terminate the invoked_subcommand chain.
    # since we're in a regular command (and not a group) then
    # the invoked subcommand is None.
    ctx.invoked_subcommand = None
    ctx.subcommand_passed = None
    injected = hooked_wrapped_callback(self, ctx, self.callback)  # type: ignore
    await injected(*ctx.args, **ctx.kwargs)  # type: ignore

https://github.com/Rapptz/discord.py/blob/master/discord/ext/commands/core.py#L1014-L1023

но к сожалению для меня это пока еще тяжело к пониманию….
Genabox
 bot = commands.Bot(command_prefix="!")
# Set an attribute on our bot
bot.test = "I am accessible everywhere!"
@bot.command()
async def get(ctx: commands.Context):
    """A command to get the current value of `test`."""
    # Send what the test attribute is currently set to
    await ctx.send(ctx.bot.test)
@bot.command()
async def setval(ctx: commands.Context, *, new_text: str):
    """A command to set a new value of `test`."""
    # Here we change the attribute to what was specified in new_text
    bot.test = new_text

Python allows you to set custom attributes to most objects, like your bot! By storing things as attributes of the bot object, you can access them anywhere you access your bot. In the discord.py library, these custom attributes are commonly known as “bot variables” and can be a lifesaver if your bot is divided into many different files. An example on how to use custom attributes on your bot is shown below:

уже ближе к теме, блин мне просто некому объяснить что к чему на малых оборотах, так понять трудно
xam1816
а если так сделать сработает?
  
import some_module
 
@bot.command()
async def setval(ctx: commands.Context, *, new_text: str):
    """A command to set a new value of `test`."""
    # Here we change the attribute to what was specified in new_text
    bot.test = some_module.get_weather('city')
Genabox
нет ты не понял
это мне не нужно
у меня функцию запускает программа (не дискорд бот), эта функция получает данный, аудиофайлы картинки неважно
теперь мне это нужно запихнуть в дискор

мне не нужно в бот импортровать свои модули в бот файл потому что они выполняют автономную работу и результат выдают в чат - тоесть работают независимо а дискорд юзают лишь для выдачи инфы

может я что то неправильно оъясняю но задача простая
послать полученную инфо в дискорд чат или дискорд войс чат
как вызвать этого бота своей прогой с скормить ему мою инфу я не понимаю
—-
бот уже сидит в чате и все понимает, тут проблем нет.
просто я не понимаю как вызвать этот асинхронный дикоратор ИМЕННО СВОЕЙ ПРОГОЙ %)
Genabox
а то что ты описал у меня такое есть
 @bot.command(name='hi3')
async def SendMessage(ctx):
    await weatherV(ctx)

пишешь hi3' в дискорде он тебе запускает анинхронную weatherV и выдает погоду в чат
но это не то
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB