はじまり
Discordでbot作ろうと久々に作り始めたときにチャンネルIDを取得して指定しないとメッセージが送信できないと勘違いして作った。
偶然の産物的な(意図してるけど)
これは何?
最初にファイルの存在を確認
あれば読み込みチャンネルIDを変数に格納
なければそのままスルー
/setup チャンネルID
でチャンネルIDが正しければ指定したチャンネルに成功とメッセージが送信される
/save
でチャンネルIDをテキストファイルに保存
どういうときに使うの?
いろんなチャンネルでbotが動かないようにチャンネルを指定してる人はbotを動かすチャンネルを変えるときに便利かも?
特に気にしない人はmessage.channelを使おうね
プログラム
client = discord.Client() @client.event @client.eventソースコード(折りたたんでいます)
```python
import discord
async def on_ready():
print("logged in as "+client.user.name)
try:
with open("test.txt","r")as f:
channel=client.get_channel(int(f.read()))
await channel.send("チャンネルIDをロードできました")
except FileNotFoundError:
print("チャンネルIDが取得できませんでした")
async def on_message(message):
global tmp
if message.author != client.user:
if message.content.startswith("/setup")==True:
tmp=message.content[7:len(message.content)]
try:
channel=client.get_channel(int(tmp))
except ValueError:
print("不正な値です")
try:
await channel.send("成功")
except AttributeError:
print("チャンネルIDが間違っています")
except UnboundLocalError:
print("不正な型です")
if message.content=="/save":
f=open("test.txt","w")
f.write(tmp)
f.close()
channel=client.get_channel(int(tmp))
await channel.send("チャンネルIDを保存しました")
client.run("token")
```
解説
ファイルのロード
try:
with open("test.txt","r")as f:
channel=client.get_channel(int(f.read()))
await channel.send("チャンネルIDをロードできました")
load=1
except FileNotFoundError:
print("チャンネルIDが取得できませんでした")
ファイルがなかった場合などはtry exceptでエラー処理してます。
当然テキストファイルから読み込むため文字列から数値に変換も必要なのでint()も使ってます。
チャンネルID取得
if message.content.startswith("/setup")==True:
tmp=message.content[7:len(message.content)]
try:
channel=client.get_channel(int(tmp))
except ValueError:
print("不正な値です")
try:
await channel.send("成功")
except AttributeError:
print("チャンネルIDが間違っています")
except UnboundLocalError:
print("不正な型です")
/setup チャンネルID
でチャンネルID部分だけ取り出しclient.get_channel(int(tmp))
でチャンネルIDをchannelに格納
エラー処理はいるかわからないけど入れた
チャンネルID保存
if message.content=="/save":
f=open("test.txt","w")
f.write(tmp)
f.close()
channel=client.get_channel(int(tmp))
await channel.send("チャンネルIDを保存しました")
open("保存ファイル","種類")
これ適当に覚えてるけどwriteのw readのrぐらい覚えておけば何とかなる()
ここらへんも主にファイルの書き込み読み込みだけだから難しくはないはず