botが動かない件について。
前回の投稿ではソースの一部分をあげていましたが、そこの部分以外に原因があると考え投稿させて頂きます。
ご指摘頂ければ幸いです。
python
1import discord # インストールした discord.py 2import datetime # 滞在時間計測用 3import asyncio 4 5token = 'token' 6 7client = discord.Client() # 接続に使用するオブジェクト 8 9 10 11# 強制退出処理 12async def move_to_none(): 13 # 接続に利用するオブジェクト 14 client = discord.Client() 15 # 該当サーバーの特定のチャンネルIDを入れてください。 16 talk_channel_id =878830663808213026 17 channel = client.get_channel(talk_channel_id) 18 # チャンネル経由でサーバー内のボイスチャンネル全体を走査 19 for ch in channel.guild.voice_channels: 20 for member in ch.members: 21 # move_to(None)で特定のメンバーを切断する 22 await member.move_to(None) 23 24 25# 起動時に通知してくれる処理 26@client.event 27async def on_ready(): 28 last_clocked_time = datetime.datetime.now() 29 30 while True: 31 # ここから30秒間隔の処理 32 if last_clocked_time.hour is not datetime.datetime.now().hour: 33 # 2時に強制退出 34 if datetime.datetime.now().hour == 4: 35 print("強制退出を実行します") 36 await move_to_none() 37 last_clocked_time = datetime.datetime.now() # 時刻更新処理 38 await asyncio.sleep(30) 39 40import twitter 41import discord 42 43# 取得したキーとアクセストークンを設定する 44 45intents = discord.Intents.default() 46intents.members = True 47client = discord.Client(intents=intents) 48 49@client.event 50async def on_ready(): 51 print('Logged in as') 52 print(client.user.name) 53 print(client.user.id) 54 print('------') 55@client.event 56async def on_message(message): 57 if message.author.bot: 58 return 59 if message.content.startswith("!twi"): 60 message.content=message.content.replace("!twi",message.author.name+":") 61 # twitterへメッセージを投稿する 62 if len(message.content) <= 140: 63 #Twitterに投稿 64 Oauth = twitter.OAuth(consumer_key="api", 65 consumer_secret="api", 66 token="api", 67 token_secret=api) 68 twi = twitter.Twitter(auth=Oauth) 69 twi.statuses.update(status=message.content) 70 else: 71 msg="Twitterへの投稿に失敗しました、文字数を減らしてください。" 72 await message.channel.send(msg) 73 74import discord 75 76# 自分のBotのアクセストークン 77TOKEN = 'token' 78 79# Reaction 80list_yesno = ['????♂️', '????♂️'] 81list_vote = ['1️⃣', '2️⃣', '3️⃣', '4️⃣', '5️⃣', '6️⃣', '7️⃣', '8️⃣', '9️⃣', '????'] 82 83 84def emphasize(text): 85 return "**" + text + "**" 86 87 88def underline(text): 89 return "__" + text + "__" 90 91 92def isContainedNoInput(command): 93 for i in command: 94 if i == "": 95 return True 96 return False 97 98 99client = discord.Client() 100 101 102# メッセージ受信時に動作する処理 103@client.event 104async def on_message(message): 105 # メッセージ送信者がBotだった場合は無視する 106 if message.author.bot: 107 return 108 109 # コマンドのセパレータは"." 110 command = message.content.split(".") 111 112 # 投票関連のコマンド 113 if command[0] == "/Q": 114 115 # セパレータによる不自然な挙動を防止 116 if isContainedNoInput(command): 117 await message.channel.send("無効なコマンドです (セパレータが連続もしくは最後に入力されています)") 118 return 119 120 try: 121 # Yes-No 疑問文 122 if command[1] == "yes-no": 123 embed = discord.Embed(title=command[2], description="", color=discord.Colour.blue()) 124 125 # 質問文を表示してYes,Noを絵文字でリアクション 126 voting_msg = await message.channel.send(embed=embed) 127 for i in range(len(list_yesno)): 128 await voting_msg.add_reaction(list_yesno[i]) 129 return 130 131 # 選択肢のある疑問文 132 elif command[1] == "vote": 133 embed = discord.Embed(title=command[2], description="", color=discord.Colour.green()) 134 135 # 選択肢の数を確認 136 select = len(command) - 3 137 if select > 10: 138 await message.channel.send("可能な選択肢は最大10個までです") 139 return 140 141 # 選択肢を表示 142 vote_candidate = command[3:] 143 for i in range(len(vote_candidate)): 144 embed.description = embed.description + list_vote[i] + " " + vote_candidate[i] + "\n" 145 146 # リアクションによる回答欄を作成 147 voting_msg = await message.channel.send(embed=embed) 148 for i in range(select): 149 await voting_msg.add_reaction(list_vote[i]) 150 return 151 152 # 使い方 153 elif command[1] == "help": 154 embed = discord.Embed(title="使用方法", description="", color=discord.Colour.red()) 155 embed.description = emphasize("question.[TYPE].[CONTENT] + .[CANDIDATE]\n") + \ 156 "注意 : 質問文や選択肢に\".\"を含めないでください\n" \ 157 "\n" \ 158 + emphasize("[TYPE] : \"yes-no\" or \"vote\"\n") + \ 159 underline("\"yes-no\" : \n") + \ 160 "Yes-No疑問文を作成します\n" \ 161 "[CANDIDATE]は必要ありません\n" \ 162 + underline("\"vote\" : \n") + \ 163 "選択肢が複数ある質問を作成します\n" \ 164 "[CANDIDATE]がない場合は質問文だけ表示されます\n" \ 165 "\n" \ 166 + emphasize("[CONTENT] : \n") + \ 167 "質問文に相当します\n" \ 168 "\n" \ 169 + emphasize("[CANDIDATE] : \n") + \ 170 "質問形式が\"vote\"である場合の選択肢です\n" \ 171 "選択肢として可能な最大個数は10個までです\n" 172 await message.channel.send(embed=embed) 173 174 # 以上のどの形式でもないものは形式不備を伝える 175 else: 176 await message.channel.send("質問形式が異なっています (2つめの引数が正しくありません)") 177 return 178 179 except IndexError: 180 await message.channel.send("質問の入力形式に間違いがあります (引数が足りません)") 181 return 182 183import discord 184 185client = discord.Client() 186 187@client.event 188async def on_ready(): 189 embed = discord.Embed( # Embedを定義する 190 title="botを起動しました",# タイトル 191 color=0x00ff00, # フレーム色指定(今回は緑) 192 description="不具合、質問がある場合はdmに下さい。", # Embedの説明文 必要に応じて 193 url="https://example.com" # これを設定すると、タイトルが指定URLへのリンクになる 194 ) 195 196 embed.set_author( 197 name=client.user, # Botのユーザー名 198 url="https://repo.exapmle.com/bot", # titleのurlのようにnameをリンクにできる。botのWebサイトとかGithubとか 199 icon_url=client.user.avatar_url # Botのアイコンを設定してみる 200 ) 201 202 embed.set_thumbnail(url="https://image.example.com/thumbnail.png") # サムネイルとして小さい画像を設定できる 203 204 embed.set_image(url="https://image.example.com/main.png") # 大きな画像タイルを設定できる 205 206 embed.add_field(name="フィールド1",value="値1") # フィールドを追加。 207 embed.add_field(name="フィールド2",value="値2") 208 209 embed.set_footer( 210 text="made by nashiroaoi", # フッターには開発者の情報でも入れてみる 211 icon_url="https://dev.exapmple.com/profile.png" 212 ) 213 214 channel = client.get_channel(881166734835470406) # ここのチャンネルIDを間違えると送信できないので注意してください 215 await channel.send(embed=embed) 216 217 activity = discord.Activity(name='Prodeced by Senchan', type=discord.ActivityType.watching) 218 # watchingの部分を変えることで表示を変えることができます。 219 # playing: ○○をプレイ中, streaming: ○○を配信中, listening: ○○を再生中, watching: ○○を視聴中 220 await client.change_presence(activity=activity) 221 222@client.event 223async def on_message(message): 224 if message.author.bot: 225 return 226 if message.content.startswith('/ver'): # startswithにすることにより、/ver, /ver abc, /versionなどに反応します。 227 send_message = '> ver1.0' 228 await message.channel.send(send_message) 229 230 231# exitを使うため 232import sys 233# discordのAPI 234import discord 235# Google検索 236from googlesearch import search 237 238# 接続に必要らしい(よくわかってない) 239client = discord.Client() 240 241# とりあえずフラグでモード管理しようかなと 242ModeFlag = 0 243 244 245# メッセージを受けた時の動作 246@client.event 247async def on_message(message): 248 # イベント入るたびに初期化はまずいのでグローバル変数で 249 global ModeFlag 250 # botの発言は無視する(無限ループ回避) 251 if message.author.bot: 252 return 253 # 一応終了するコマンドも用意しておく 254 if message.content == '!exit': 255 await message.channel.send('ノシ') 256 sys.exit() 257 # google検索モード(次に何か入力されるとそれを検索) 258 if ModeFlag == 1: 259 kensaku = message.content 260 ModeFlag = 0 261 count = 0 262 # 日本語で検索した上位5件を順番に表示 263 for url in search(kensaku, lang="jp",num = 5): 264 await message.channel.send(url) 265 count += 1 266 if(count == 5): 267 break 268 # google検索モードへの切り替え 269 if message.content == '/google': 270 ModeFlag = 1 271 await message.channel.send('検索するワードをチャットで発言してね') 272 # 単純な応答 273 if message.content == 'bot君いる?': 274 await message.channel.send('私bot君。あなたの後ろにいるよ。') 275 # 特定の文字から始まる文章が発言されたとき 276 if message.content.startswith('負け'): 277 lose = message.author.name + "の負け!w" 278 await message.channel.send(lose) 279 #リプライを受け取った時 280 if client.user in message.mentions: 281 reply = f'{message.author.mention} うるさいよ。' 282 await message.channel.send(reply) 283 # これについては触れないよ。 284 if message.content.startswith("なんだかんだ"): 285 kanda = "かんだ・・・神田ァ!?\n" + "https://www.youtube.com/watch?v=KUwpssJX37M" 286 await message.channel.send(kanda) 287 288 289client.run("token") 290