Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 24, 2023 22:22:56

Genabox
Зарегистрирован: 2022-12-24
Сообщения: 198
Репутация: +  1  -
Профиль   Отправить e-mail  

вызвать команду бота модулем

привет подскажите пожалуйста как тут вызвать команду из модуля

 @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 (Янв. 24, 2023 22:26:15)

Офлайн

#2 Янв. 24, 2023 23:48:44

Genabox
Зарегистрирован: 2022-12-24
Сообщения: 198
Репутация: +  1  -
Профиль   Отправить e-mail  

вызвать команду бота модулем

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 (Янв. 25, 2023 04:17:00)

Офлайн

#3 Янв. 25, 2023 06:49:22

Genabox
Зарегистрирован: 2022-12-24
Сообщения: 198
Репутация: +  1  -
Профиль   Отправить e-mail  

вызвать команду бота модулем

 import invoke
def testA():
        c = invoke.context
        print('test_______________A')
        c.Context.run(command='weatherV')

есть идеи??

Отредактировано Genabox (Янв. 25, 2023 06:49:32)

Офлайн

#4 Янв. 25, 2023 23:26:47

Genabox
Зарегистрирован: 2022-12-24
Сообщения: 198
Репутация: +  1  -
Профиль   Отправить e-mail  

вызвать команду бота модулем

help, i need help!

Офлайн

#5 Янв. 26, 2023 06:34:28

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1352
Репутация: +  118  -
Профиль   Отправить e-mail  

вызвать команду бота модулем

Genabox
help, i need help!
В каком месте кода запускается асинхронная функция?

Офлайн

#6 Янв. 26, 2023 07:04:04

Genabox
Зарегистрирован: 2022-12-24
Сообщения: 198
Репутация: +  1  -
Профиль   Отправить e-mail  

вызвать команду бота модулем

Опривет сенкс что откликнулся
у меня есть обычный 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 (Янв. 26, 2023 07:17:15)

Офлайн

#7 Янв. 26, 2023 21:32:07

Genabox
Зарегистрирован: 2022-12-24
Сообщения: 198
Репутация: +  1  -
Профиль   Отправить e-mail  

вызвать команду бота модулем

 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:

уже ближе к теме, блин мне просто некому объяснить что к чему на малых оборотах, так понять трудно

Офлайн

#8 Янв. 26, 2023 22:39:29

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1352
Репутация: +  118  -
Профиль   Отправить e-mail  

вызвать команду бота модулем

а если так сделать сработает?

  
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')

Отредактировано xam1816 (Янв. 26, 2023 22:40:42)

Офлайн

#9 Янв. 26, 2023 23:36:00

Genabox
Зарегистрирован: 2022-12-24
Сообщения: 198
Репутация: +  1  -
Профиль   Отправить e-mail  

вызвать команду бота модулем

нет ты не понял
это мне не нужно
у меня функцию запускает программа (не дискорд бот), эта функция получает данный, аудиофайлы картинки неважно
теперь мне это нужно запихнуть в дискор

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

может я что то неправильно оъясняю но задача простая
послать полученную инфо в дискорд чат или дискорд войс чат
как вызвать этого бота своей прогой с скормить ему мою инфу я не понимаю
—-
бот уже сидит в чате и все понимает, тут проблем нет.
просто я не понимаю как вызвать этот асинхронный дикоратор ИМЕННО СВОЕЙ ПРОГОЙ %)

Отредактировано Genabox (Янв. 26, 2023 23:44:44)

Офлайн

#10 Янв. 26, 2023 23:48:54

Genabox
Зарегистрирован: 2022-12-24
Сообщения: 198
Репутация: +  1  -
Профиль   Отправить e-mail  

вызвать команду бота модулем

а то что ты описал у меня такое есть

 @bot.command(name='hi3')
async def SendMessage(ctx):
    await weatherV(ctx)

пишешь hi3' в дискорде он тебе запускает анинхронную weatherV и выдает погоду в чат
но это не то

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version