3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

LinuxをDiscord Botで操作してみた

Last updated at Posted at 2020-05-29

#初めに

この記事は僕がPythonで作ったDiscord Botを簡単に共有できればと思い書いたものです
あまり詳しくは書きませんが誰かの役に立てれば幸いです

#このBotで出来ること
Discord からLinuxを操作できます
「ls」コマンドや 「less」コマンドなど基本的に何でも使えます。
ただvimやsudoなどユーザーが追加で入力するものなどは使えません(コード追加すれば可能だと思われ)
二千文字の制限がDiscordにあるのでそれ以上のものは送信できません。
あとエラー処理してないのでvimなど開こうとするとbotが飛びます。

#実行環境
Debian 10
Python 3.7.3

#コード


import subprocess

# インストールした discord.py を読み込む
import discord

# 自分のBotのアクセストークンに置き換えてください
TOKEN = 'ボットのトークン'

# 接続に必要なオブジェクトを生成
client = discord.Client()

# 起動時に動作する処理
@client.event
async def on_ready():
    # 起動したらターミナルにログイン通知が表示される
    print('ログインしました')

async def job(message):
    await message.channel.send('そろそろ寝ましょう!')

# メッセージ受信時に動作する処理
@client.event
async def on_message(message):
    # メッセージ送信者がBotだった場合は無視する
    if message.author.bot:
        return
    # 「/neko」と発言したら「にゃーん」が返る処理

    if message.content == '/neko':
        await message.channel.send('にゃーん')

    if message.content == '/konn':
        await message.channel.send("こん")

    if message.author.id == DiscordのユーザーID:
        messStr = str(message.content)#ユーザーのメッセージを取得
        messList = messStr.split(" ")#ユーザーのメッセージをスペース区切りで配列にする

        res = subprocess.check_output(messList)#そのコマンドを実行、出力をresに代入
        res = res.decode("utf-8")#resをutf-8ででデコード
        await message.channel.send(res)#メッセージを送信
    else:
        await message.channel.send("権限がありません")

client.run(TOKEN)

#ユーザーIDについて
途中で出てきたユーザーIDというのはDiscordで確認できます。
そのIDを使ってコマンドを実行してよいユーザーなのかを判定しています。

###IDを表示する方法
ユーザー設定→テーマ→開発者モード をオンにします
そしてDiscordのユーザーを右クリックしてIDをコピーから参照できます。

3
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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?