簡體   English   中英

如何使這段代碼更短(多次復制/粘貼同一行)?

[英]How can I make this code shorter (copy/pasted the same lines many times over)?

所以我有一些代碼看起來像這樣:

import discord, asyncio

client = discord.Client()

@client.event
async def on_member_update(preupd, postupd):
    if postupd.server.id == '1234' and postupd.permissions_in(client.get_channel('5')).read_messages == True:
        embed = discord.Embed(title="𝅳𝅳Test", colour=0xFF000)
        embed.add_field(name="𝅳𝅳Test", value="Test <#5>")
        await client.send_message(client.get_channel('5'), embed=embed)
    if postupd.server.id == '1234' and postupd.permissions_in(client.get_channel('6')).read_messages == True:
        embed = discord.Embed(title="𝅳𝅳Test", colour=0xFF000)
        embed.add_field(name="𝅳𝅳Test", value="Test <#6>")
        await client.send_message(client.get_channel('6'), embed=embed)
    if postupd.server.id == '1234' and postupd.permissions_in(client.get_channel('7')).read_messages == True:
        embed = discord.Embed(title="𝅳𝅳Test", colour=0xFF000)
        embed.add_field(name="𝅳𝅳Test", value="Test <#7>")
        await client.send_message(client.get_channel('7'), embed=embed)
    if postupd.server.id == '1234' and postupd.permissions_in(client.get_channel('8')).read_messages == True:
        embed = discord.Embed(title="𝅳𝅳Test", colour=0xFF000)
        embed.add_field(name="𝅳𝅳Test", value="Test <#8>")
        await client.send_message(client.get_channel('8'), embed=embed)

client.run('ClientTokenHere')

如您所見,我將相同的內容復制/粘貼了4次,但細節稍有不同。 因此,我嘗試通過編寫如下函數來縮短代碼:

import discord, asyncio

client = discord.Client()

@client.event
async def on_member_update(preupd, postupd):
    async def shorter(numba):
        if postupd.server.id == '1234' and postupd.permissions_in(client.get_channel(str(numba))).read_messages == True:
            embed = discord.Embed(title="𝅳𝅳Test", colour=0xFF000)
            embed.add_field(name="𝅳𝅳Test", value="Test <#%s>" % numba)
            await client.send_message(client.get_channel(str(numba)), embed=embed)

    shorter('5')
    shorter('6')
    shorter('7')
    shorter('8')

client.run('ClientTokenHere')

但是,這給了我一個錯誤: myfile.py:35: RuntimeWarning: coroutine 'on_member_update.<locals>.perms' was never awaited : myfile.py:35: RuntimeWarning: coroutine 'on_member_update.<locals>.perms' was never awaited ,即使我在頂部運行“更長”版本代碼,一切也可以順利進行。 顯然,我以某種方式錯誤地定義了函數。 我怎樣才能解決這個問題? 或者,還有更好的方法? 謝謝

您還可以執行以下操作:

import discord, asyncio

client = discord.Client()

@client.event
async def on_member_update(preupd, postupd):
    for numba in ('5', '6', '7', '8'):
        if postupd.server.id == '1234' and postupd.permissions_in(client.get_channel(str(numba))).read_messages == True:
            embed = discord.Embed(title="𝅳𝅳Test", colour=0xFF000)
            embed.add_field(name="𝅳𝅳Test", value="Test <#%s>" % numba)
            await client.send_message(client.get_channel(str(numba)), embed=embed)

client.run('ClientTokenHere')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM