Q&A
Discord.py コマンドでロール付与をしたいのですがやり方がわかりません。助けてほしいです。
現在こんな感じです
import
1import os 2import os; 3 4import ma as ma 5 6print(os.getcwd()) 7import subprocess 8import sys 9import random 10import asyncio 11import string 12import secrets 13import discord 14import os 15from discord.ext import commands 16import random 17from discord import Permissions 18import asyncio 19import shutil 20 21 22# 自分のBotのアクセストークンに置き換えてください 23# 読込むファイルのパスを宣言する 24file_name = "./token.txt" 25 26try: 27 file = open(file_name) 28 data = file.read() 29 print(data) 30except Exception as e: 31 print(e) 32finally: 33 file.close() 34 35 36# 接続に必要なオブジェクトを生成 37client = discord.Client() 38 39# 起動時に動作する処理 40@client.event 41async def on_ready(): 42 # 起動したらターミナルにログイン通知が表示される 43 print('----------------') 44 print('ログインしました') 45 print('----------------') 46 print('') 47 print('BOT表示名:', client.user.name) # Botの名前 48 print('BOTのID:', client.user.id) # ID 49 print('Dicord.pyのバージョン:', discord.__version__) 50 ch = client.get_channel(947469205538762812) 51 print('') 52 guild_count = len(client.guilds) 53 game = discord.Game(f'{guild_count} サーバーに導入されています') 54 await client.change_presence(activity=discord.Game(name=game)) 55 print('ログインしました {0.user}'.format(client)) 56 await ch.send("BOTが起動しました!") 57 58 59# メッセージ受信時に動作する処理 60@client.event 61async def on_message(message): 62 guild_count = len(client.guilds) 63 game = discord.Game(f'{guild_count} サーバーに導入されています') 64 await client.change_presence(activity=discord.Game(name=game)) 65 # メッセージ送信者がBotだった場合は無視する 66 67 68 69 if message.author.bot: 70 return 71 # 「/neko」と発言したら「にゃーん」が返る処理 72 if message.content == 'spb!認証': 73 74 passseta = random.randint(11111111, 9999999999) 75 passsetb = random.randint(11111111, 9999999999) 76 passsetc = random.randint(11111111, 9999999999) 77 print(passseta) 78 print(passsetb) 79 print(passsetc) 80 passlock = passseta+passsetb+passsetc 81 channel = message.channel 82 await channel.send("認証コードを30秒以内に送ってください") 83 await channel.send(str('`認証コード : `')+str(passlock)) 84 path = str('./')+str(message.guild.id)+str(message.channel.id) 85 file_name = str('./')+str(message.guild.id)+str(message.channel.id) 86 file = open(file_name, 'w') 87 file.write(str(passlock)) 88 file.close() 89 file = open(file_name) 90 file.close() 91 92 # 待っているものに該当するかを確認する関数 93 def check(m): 94 # メッセージが `おはよう` かつ メッセージを送信したチャンネルが 95 # コマンドを打ったチャンネルという条件 96 path = str('./')+str(message.guild.id)+str(message.channel.id) 97 file_name = str('./')+str(message.guild.id)+str(message.channel.id) 98 f = open(path) 99 file = open(file_name) 100 data = file.read() 101 print(data) 102 file.close() 103 file = open(file_name) 104 file.close() 105 return m.content == data and m.channel == channel 106 107 try: 108 # wait_forを用いて、イベントが発火し指定した条件を満たすまで待機する 109 msg = await client.wait_for('message', check=check, timeout=30) 110 # wait_forの1つ目のパラメータは、イベント名の on_がないもの 111 # 2つ目は、待っているものに該当するかを確認する関数 (任意) 112 # 3つ目は、タイムアウトして asyncio.TimeoutError が発生するまでの秒数 113 114 # asyncio.TimeoutError が発生したらここに飛ぶ 115 except asyncio.TimeoutError: 116 await channel.send(f'{message.author.mention}さん、認証時間切れです') 117 else: 118 # メンション付きでメッセージを送信する。 119 await channel.send(f'{msg.author.mention}さん、認証は成功しました') 120 ROLE_ID = 975753269420884048 121 ID_ROLE_WELCOME = 975753269420884048 # 付けたい役職のID 122 # channel_id から Channel オブジェクトを取得 123 role = guild.get_role(ID_ROLE_WELCOME) 124 # リアクションを付けたメンバーに役職を付与 125 await member.add_roles(role) 126 # 分かりやすいように歓迎のメッセージを送る 127 await channel.send('いらっしゃいませ!') 128 129 130# Botの起動とDiscordサーバーへの接続 131client.run(data)
こちらの質問が複数のユーザーから「調査したこと・試したことが記載されていない質問」という指摘を受けました。