Создание приватного V c discord.py - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь создать частный v c для функции, которую пытаюсь сделать. он делает v c с разрешениями, которые я хочу сделать, но затем он выдает ошибку после того, как он это сделал, и я не могу поставить за ним какой-либо код. Это код:

guild = ctx.author.guild
players_role = await guild.create_role(name=f"Players {game_id}")
for i in all_players:
    print(all_players)
    print(i)
    i = guild.get_member(int(i[1]))
    await i.add_roles(players_role)
    overwrites = {
        guild.default_role: discord.PermissionOverwrite(view_channel=False),
        players_role: discord.PermissionOverwrite(view_channel=True)
    }
    players_vc = await guild.create_voice_channel(f"Game: {game_id}", overwrites=overwrites)

    await players_vc.edit(position=len(ctx.guild.voice_channels))
    print("edited position")

Я пытаюсь отредактировать созданный мною v c так, чтобы он тянулся вниз, но он этого не делает, потому что выдает ошибку в предыдущая строка. Я попытался поместить players_vc = await guild.create_voice_channel(f"Game: {game_id}", overwrites=overwrites) в try: и except:, но мне нужна переменная для редактирования позиции. вот сообщение об ошибке:

Traceback (most recent call last):


File "C:\Users\Gebruiker\AppData\Local\Programs\Python\Python37-32\lib\site-packages\discord\ext\commands\core.py", line 83, in wrapped
    ret = await coro(*args, **kwargs)
  File "D:\Thijs coding map\TeaBot\TeaBot.py", line 889, in vc_test
    test_vc = await guild.create_voice_channel(f"test vc", overwrites=overwrites)
  File "C:\Users\Gebruiker\AppData\Local\Programs\Python\Python37-32\lib\site-packages\discord\guild.py", line 888, in create_voice_channel
    channel = VoiceChannel(state=self._state, guild=self, data=data)
  File "C:\Users\Gebruiker\AppData\Local\Programs\Python\Python37-32\lib\site-packages\discord\channel.py", line 553, in __init__
    self._update(guild, data)
  File "C:\Users\Gebruiker\AppData\Local\Programs\Python\Python37-32\lib\site-packages\discord\channel.py", line 584, in _update
    self._fill_overwrites(data)
  File "C:\Users\Gebruiker\AppData\Local\Programs\Python\Python37-32\lib\site-packages\discord\abc.py", line 294, in _fill_overwrites
    self._overwrites.append(_Overwrites(id=overridden_id, **overridden))
TypeError: __new__() got an unexpected keyword argument 'allow_new'

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

@client.command()
async def vc_test(ctx):
    guild = ctx.guild
    user = ctx.author
    overwrites = {
        guild.default_role: discord.PermissionOverwrite(view_channel=False),
        guild.me: discord.PermissionOverwrite(view_channel=True)
    }
    test_vc = await guild.create_voice_channel(f"test vc", overwrites=overwrites)

    await test_vc.edit(position=len(guild.voice_channels))
    print("edited position")

Я не мог найти эту проблему в другом месте, вся помощь приветствуется

1 Ответ

0 голосов
/ 10 июля 2020

решение:

venv\lib\site-package\discord\abc.py

откройте и найдите

_Overwrites = namedtuple('_Overwrites', 'id allow deny type')

и замените

class _Overwrites:
__slots__ = ('id', 'allow', 'deny', 'type')

def __init__(self, **kwargs):
    self.id = kwargs.pop('id')
    self.allow = kwargs.pop('allow', 0)
    self.deny = kwargs.pop('deny', 0)
    self.type = kwargs.pop('type')

def _asdict(self):
    return {
        'id': self.id,
        'allow': self.allow,
        'deny': self.deny,
        'type': self.type,
    }

Вы можете посмотреть здесь

...