LoginSignup
0
2

More than 3 years have passed since last update.

指定したチャンネルIDをテキストに保存して次回起動時読み込む

Posted at

はじまり

Discordでbot作ろうと久々に作り始めたときにチャンネルIDを取得して指定しないとメッセージが送信できないと勘違いして作った。
偶然の産物的な(意図してるけど)

これは何?

最初にファイルの存在を確認
あれば読み込みチャンネルIDを変数に格納
なければそのままスルー
/setup チャンネルID
でチャンネルIDが正しければ指定したチャンネルに成功とメッセージが送信される
/save
でチャンネルIDをテキストファイルに保存

どういうときに使うの?

いろんなチャンネルでbotが動かないようにチャンネルを指定してる人はbotを動かすチャンネルを変えるときに便利かも?
特に気にしない人はmessage.channelを使おうね

プログラム

ソースコード(折りたたんでいます)
 
```python
import discord

client = discord.Client()

@client.event
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が取得できませんでした")

@client.event
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ぐらい覚えておけば何とかなる()
ここらへんも主にファイルの書き込み読み込みだけだから難しくはないはず

まとめ

基礎はしっかり学ぼう

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2