проблемы с преобразованием строки в объект discord.Color(), а затем обратно

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

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

Честно говоря, я потерял все, что пробовал, до сих пор это было 5-часовой проблемой, и я все еще пробую случайные настройки здесь и там.

    ###allows the user to set the stripe color of their character sheet embed.
@character.command(name="setcol")
async def color_set(self, ctx, *, color:str):
    if "#" in color:
        color = color.replace("#", "")
    member = ctx.message.author
    col = discord.Color(value=int(color, 16))
    await self.config.member(member).color.set(col.to_rgb())
    await asyncio.sleep(1)
    col = await self.config.member(member).color()
    pvw = discord.Embed(name="Preview", description="Preview", color=discord.Color.from_rgb(*col))
    await ctx.send(embed=pvw)
    await ctx.send("{}".format(col))

Ожидается: ##character setcol 00fe00: преобразует 00fe00 в объект discord.color(), преобразует объект в строку, сохраняет строку в переменной конфигурации color, превращает строку обратно в объект discord.Color(), возвращает встроенный предварительный просмотр с правильный цвет, печатает шестнадцатеричный код

факт: ##character setcol 00fe00: преобразует 00fe00 в объект discord.color(), преобразует объект в строку, сохраняет строку в переменной конфигурации цвета, возвращает ошибку TypeError: Expected int parameter, received str instead, функция завершается


person Bailey Singer    schedule 26.12.2018    source источник
comment
Какое полное сообщение об ошибке? Это ваши self.config.member вызовы не работают или Embed? передача цвета непосредственно из конвертера во вставку должна работать, я не уверен, почему вы меняете его на/из строк   -  person Patrick Haugh    schedule 26.12.2018
comment
Когда я просто помещаю необработанный пользовательский ввод в discord.Color(), он выдает ошибку, говорящую, что он ожидал объект int или discord.Color, но вместо этого получил строку, поэтому у меня есть все преобразованные   -  person Bailey Singer    schedule 26.12.2018
comment
С помощью сервера сообщества ботов Red Discord я смог разобраться. Пришлось поколдовать, чтобы заставить все переменные работать нормально, опубликовав обновленный код.   -  person Bailey Singer    schedule 26.12.2018


Ответы (1)


###allows the user to set the stripe color of their character sheet embed.
@character.command(name="setcol")
async def color_set(self, ctx, *, color:str):
    if "#" in color:
        color = color.replace("#", "")
    member = ctx.message.author
    col = discord.Color(value=int(color, 16))
    await self.config.member(member).color.set(col.to_rgb())
    await asyncio.sleep(1)
    col = await self.config.member(member).color()
    pvw = discord.Embed(name="Preview", description="Preview", color=discord.Color.from_rgb(*col))
    await ctx.send(embed=pvw)
    await ctx.send("{}".format(col))

Не знаю, почему я не сделал этого в первую очередь вместо обновления оригинала, но эй, что угодно. Так что да. Это фиксированный код. По сути, нужно взять шестнадцатеричный код, удалить из него #, преобразовать его в RGB, сохранить RGB как кортеж, преобразовать кортеж обратно в RGB при его вызове. Это боль, но эй, это делает то, что я хочу!

person Bailey Singer    schedule 26.12.2018