0
0

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?