0
0

More than 1 year has passed since last update.

discord.py グローバルチャットでBAN機能を追加する方法(簡易版)

Posted at

初投稿です

Discordのグローバルチャット内で悪質なスパムや勝手に宣伝などをしてくる人がよくいますよね。
「BANしたいけど解説してるサイトがあまりないからどうしよう...」ってことがよくありました。
自分も解説サイトを探すのに2時間くらいかかっていました。まぁ結果見つかりませんでしたw
そしてこの前、やっとその問題が解決しました!!(結局、解説サイトはありませんでした。)
Qiita にでも投稿してみようかなと思い、今回は解説させていただきます。

実行環境

・Windows 10 Home
・Python 3.9.2
・discord.py (2022年現在最新バージョン)
・VScode

この記事はなんとなくdiscord.pyを理解している人向けです。

ある程度理解している人ならすぐ理解できると思います。
一応初心者向けにもコード和訳もしてありますので、ぜひ初心者でも自信をもっていただきたいです。

難易度について

ものすごく簡単です!
今回のメインとなるコードだけなら20行もいかないと思います。
ちょっと付け足すだけのコードなのですぐ終わります。

コードを書いていく

今回書くコード
↓↓1つ目のコード


gBanList = [000000000000000000, 111111111111111111]
#gBANしたい相手のUserIDを入れます。
#0000のとこはUserIDが入ります。
#1111のとこも同じく

↓↓2つ目ののコードはグローバルチャットのコード内に書くコード


if message.author.id in gBanList:
    await message.delete()
    await message.channel.send("あなたはGBANされています。メッセージを送信することができません。")
    return

1つ目のコードについて

gBanList = [ユーザーID]
とありますが、これはBANしたい人のIDを入れます。
複数人のユーザーIDを入れることができます。

2つ目のコードについて

4行のくらいのコードですね。

if message.author.id in gBanList:

BANされているユーザーかどうか判断するコードについて

if = もし
message.author.id = メッセージ送信者のID
in gBanList: = さっきの1つ目のコードの中
つまりこれがどういうことかと言うと...

コード原文 → if message.author.id in gBanlist:
和訳 → もしgBanListに一致するIDがあれば

という和訳になると思います(※適当に和訳しました。)
これでBANされてるユーザーかどうかを判断するコードが書けました!

あとは見慣れているとは思いますが、BANされているというメッセージを送信する部分も書いていきます。

    await message.delete()
    await message.channel.send("あなたはGBANされています。メッセージを送信することができません。)
    return

これで完成しました!

完成したコードの全体

from ast import Return
import discord
import asyncio
import random
import time
import sys
from discord import message
from discord import guild
from discord import member
from discord.embeds import Embed
from discord import Embed
from discord.ext import tasks
import pickle
import os
from discord.ext import commands
#上記のモジュールは関係ないものも含まれていたりします。


#今回解説した1つ目のコード
#↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 

gBanList = [242730576195354624, 798524933013504002]

@bot.event
async def on_message(message):
    if message.channel.name == kotatsu_global_server_Text1:

        #今回解説した2つ目のコード
        #↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 

        if message.author.id in gBanList: 
            await message.delete()
            await message.channel.send("あなたはGBANされています。メッセージを送信することができません。")
            return




        if message.author.bot: 
            return
        for channel in bot.get_all_channels(): 
            if channel.name == kotatsu_global_server_Text1: 
                if channel == message.channel: 
                    continue

                embed=discord.Embed(description=message.content, color=0xcfb338) 
                embed.set_author(name="{}#{}".format(message.author.name, message.author.discriminator),icon_url="https://media.discordapp.net/avatars/{}/{}.png?size=1024".format(message.author.id, message.author.avatar))
                embed.set_footer(text="{} サーバーで送信されました。UserID {}".format(message.guild.name, message.author.id),icon_url="https://media.discordapp.net/icons/{}/{}.png?size=1024".format(message.guild.id, message.guild.icon))
                if message.attachments != []:
                    embed=discord.Embed(description=f"{message.content}\n\nファイル: {message.attachments[0].url}", color=0xcfb338, timestamp=datetime.datetime.utcnow())
                    embed.set_image(url=message.attachments[0].url)
                    embed.set_author(name="{}#{}".format(message.author.name, message.author.discriminator),icon_url="https://media.discordapp.net/avatars/{}/{}.png?size=1024".format(message.author.id, message.author.avatar))
                    embed.set_footer(text=f" \n\nサーバー:     {message.guild.name} \nチャンネル:     {message.channel.name} \nmID:     {message.id} \n\n\nで送信されました",icon_url="https://media.discordapp.net/icons/{}/{}.png?size=1024".format(message.guild.id, message.guild.icon))

                if message.reference: 
                    reference_msg = await message.channel.fetch_message(message.reference.message_id) 
                    if reference_msg.embeds and reference_msg.author == client.user: 
                        reference_message_content = reference_msg.embeds[0].description 
                        reference_message_author = reference_msg.embeds[0].author.name 
                    elif reference_msg.author != client.user:
                        reference_message_content = reference_msg.content 
                        reference_message_author = reference_msg.author.name+'#'+reference_msg.author.discriminator 
                    reference_content = ""
                    for string in reference_message_content.splitlines(): 
                        reference_content += "> " + string + "\n" 
                    reference_value = "**@{}**\n{}".format(reference_message_author, reference_content)
                    embed.add_field(name='返信しました', value=reference_value, inline=True) 

                await channel.send(embed=embed)
        await message.add_reaction('🆗')
        await message.channel.edit(slowmode_delay=7)

上記のグローバルチャットの本体部分のコードは「tsukikoh」さんが解説しています。
コード引用元→ https://qiita.com/tsukikoh/items/4cf5bd4fc4290585217a

終わり

今回初めてQiitaで投稿してみました。
正直、わかりやすく書けてるか少し心配です...w
わからないことがあればコメントしていただけると幸いです。
Discordでも質問を受け付けています。
僕のDiscordサーバー(ここをクリック)

あとYouTubeもやっていますのでよければぜひチャンネル登録お願いします。
僕のYouTubeチャンネル(ここをクリック)

0
0
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
0