Discord 중간 역할
서버 특정 역할 명령 만들기
프로모션 또는 강등을 제공하도록 봇을 설정하면 사용자가 서버 상태를 업데이트한 시기를 추적하려고 할 때 유용할 수 있습니다(틈새 Discords의 경우).
가장 먼저 필요한 것은 홍보할 수 있는 역할입니다. 역할의 ID는 변수로 설정되거나 이것이 표시되는 방식인 사전에 설정됩니다.
다음은 서버 ID입니다. 이것은
help
명령을 실행할 때 일을 깔끔하게 유지하기 위해 봇이 있을 수 있는 다른 서버와 명령을 별도로 유지하기 위해 Cog 파일에서 사용됩니다.클래스 선언 위에 사전을 순서대로 1로 설정하지만 명령 확인 중에 많은 역할이 사용됩니다. 역할은 가장 낮은 "순위"에서 가장 높은 순서로 정렬되어야 합니다.
role1ID
가 가장 낮아야 하고 role3ID
가 가장 낮아야 합니다.import nextcord
from nextcord.ext.commands.core import has_permissions
from nextcord.utils import get
from nextcord.ext import commands
RANKS = {
1: role1ID,
2: role2ID,
3: role3ID
}
class ServerRoles(commands.Cog):
def __init__(self, client):P
self.client = client
def cog_check(self, ctx):
return ctx.guild.id == <the-server-id>
...
def setup(client):
client.add_cog(ServerRoles(client))
승격 명령에 대한 논리를 추가하기 위해 이제 지정된 서버에 사용할 파일이 설정되었습니다.
@commands.command(brief="Gives promotion")
@has_permissions(manage_roles = True)
async def promote(self, ctx, user: nextcord.Member):
def getRole(key):
return get(ctx.guild.roles, id = RANKS.get(key))
# Loop through the RANKS dictionary for the current role
for key, value in RANKS.items():
try:
currentRole = getRole(key)
if key != 1:
previousRole = getRole(key -1)
if key != 3:
nextRole = getRole(key + 1)
if key == 3:
await ctx.send(f'{user} already has the highest attainable role!')
return
if currentRole in user.roles:
previousRole = currentRole
print(f'current role in user.roles section {currentRole}')
print(f'{user} has the {currentRole} role')
print(f'{user} will recieve the {nextRole} role and lose the {previousRole} role')
await user.add_roles(nextRole)
await user.remove_roles(previousRole)
await ctx.send(f'{user} has been promoted to {nextRole}')
return
except:
print("PROMOTE FAILED SOMEWHERE!!\n")
return
finally:
print("EOL for promote command")
강등 명령은 승격 명령과 매우 유사하지만 런타임 오류가 없고 봇이 충돌하지 않도록 목록에서 가장 낮은 순위를 확인합니다.
@commands.command(brief="Gives demotion")
@has_permissions(manage_roles=True)
async def demote(self, ctx, user: nextcord.Member):
def getRole(key):
return get(ctx.guild.roles, id = RANKS.get(key))
for key, value in RANKS.items():
try:
currentRole = getRole(key)
print(currentRole)
if currentRole in user.roles and key == 1:
print(f'{currentRole} is the lowest role')
await ctx.send(f'{user} is currently at the lowest rank!')
return
if key != 1:
previousRole = getRole(key - 1)
if currentRole in user.roles:
# Give previousRole
print(f'{user} has {currentRole} to be removed and {previousRole} to be given')
await user.add_roles(previousRole)
await user.remove_roles(currentRole)
await ctx.send(f'{user} has been demoted to {previousRole}')
return
else:
print('something else needs to happen before here')
except:
print('DEMOTION FAILED\n')
return
finally:
print('EOL for demotion\n')
최소 역할 요구 사항이 있는 서버
대화/연결 등을 위해 "필수"낮은 역할이 필요한 Discord에서 RANKS 사전의 순서를 계층화된 시스템으로 뒤집어서
1: role1ID
가 Discord의 최상위 계층임을 표시해야 합니다. 가장 낮은 순위를 향해 노력할 것이며, 그 중 필수 역할이 되어야 합니다.# without required role
if key != 1:
previousRole = getRole(key - 1)
if key != 3:
nextRole = getRole(key + 1)
# with required role
if key != 3:
previousRole = getRole(key + 1)
if key != 1:
nextRole = getRole(key - 1)
이렇게 하면 수표가 뒤집혀서 가장 낮은 순위가 아닌 가장 높은 순위를 먼저 보게 됩니다.
승격 및 사용자 상승 시 최저 순위를 유지하고 다시 최저 순위로 강등하려면 다른 변경이 필요합니다.
# promote command
# Check for top rank
if currentRole in user.roles and key == 1:
await ctx.send("This is the highest rank!")
return
# Check for bottom rank
if currentRole in user.roles and key == 3:
await user.add_roles(nextRole)
return
# demote command
# Check for bottom role
if currentRole in user.roles and key == 3:
await ctx.send("User is at the lowest rank already!")
return
# Remove currentRole but retain bottom role
if currentRole in user.roles and key == 2:
await user.remove_roles(currentRole)
return
Reference
이 문제에 관하여(Discord 중간 역할), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/swislokdev/discord-intermediate-roles-2ooi텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)