Отправить сообщение на текущий канал без контекста? | discord.py переписать - PullRequest
1 голос
/ 09 мая 2019

Я начал настраивать систему нивелирования для своего бота и пытался реализовать сообщение об уровне. Однако, поскольку создаваемая мной функция не является командой, я не думаю, что могу передать ей контекст, что вызывает проблемы.

Из-за отсутствия лучшего решения я добавил его в свою функцию, которая проверяет exp и сопоставляет с уровнем - что происходит, если создается копия уровня пользователя, а затем сравнивается с обновленным, чтобы увидеть, есть ли уровень произошло Это работает, однако моя ЕДИНСТВЕННАЯ проблема не в том, что я не могу отправить сообщение о повышении уровня.

async def levelcheck(user):
    global userlvl
    global userlvlc

    channel = discord.Object(id="")
    # copying the userlevel BEFORE update
    try:
        userlvlc = userlvl
    except NameError as e:
        print(e)

    with open('userexp.json', 'r') as fp:
        userexp = json.load(fp)

    # finding out level based on exp 
    for x in range(0,len(levelcaps)):
        if userexp[str(user)] <= levelcaps[x]:
            userlvl = x
            try:
                if userlvlc < userlvl:
                    await ctx.send('You levelled up --> {}'.format(userlvl))
            except NameError as e:
                print(e)
            #
            return userlvl

Как вы можете ясно видеть, это не красивая команда, но, безусловно, работает. Я начал с попытки получить идентификатор канала, только чтобы понять, что не знаю, как получить текущий канал с контекстом. Есть ли способ отправить сообщение на текущий канал без контекста, или мне нужно переосмыслить свой метод?

1 Ответ

1 голос
/ 09 мая 2019

Поскольку у вас есть идентификатор пользователя, я бы предложил это решение.

user_to_level_up = bot.fetch_user(user) # since your user variable is an ID
dm_channel = user_to_level_up.dm_channel
if dm_channel is None:
    await user_to_level_up.create_dm()
    dm_channel = user_to_level_up.dm_channel
await dm_channel.send("You've leveled up! You are now level {}".format(userlvl))

Примечание: это не проверено, но ссылки должны предоставить информацию для его работы!

Это просто отправляет им личное сообщение вместо публикации на сервере. Для публикации на сервере может потребоваться перекрестная ссылка на серверы, на которых находится пользователь, в котором находится бот, и это звучит как слишком большая работа для меня XD

...