Bot Discord อัจฉริยะ

ผู้เขียนบทความ : 089 นายมินทดา กาศคำสุข COE #15

คณะวิศวกรรมศาตร์ สาขาวิศวกรรมคอมพิวเตอร์

วิชา : 04-513-201การโปรแกรมคอมพิวเตอร์ชั้นสูง 1/2566

1.ความเป็นมา

โครงงาน Bot Discord อัจฉริยะ สร้างขึ้นมาเพื่อความสะดวกสบายในการแสดงผลข้อมูลแบบเรียลไทม์และเพื่อความรวดเร็วและแม่นยำของการเก็บข้อมูล ความปลอดภัยและความบันเทิง ในการควบคุมการกระทำของ Bot Discord อัจฉริยะ และผู้ใช้ ซึ่งสามารถควบคุมให้ Bot Discord อัจฉริยะ สามารถทำงานได้โดยการเขียน Code ในภาษา Python ทำงานได้โดยการสั่งการทำงานด้วยการ Run Bot โดยสามารถใช้ได้ในหลาย platform โดยการกระทำดังกล่าวจะอยู่ในเงื่อนไข ที่ถูกตั้งค่าโดย Developer หรือ ผู้พัฒนา ที่สามารถเข้าถึง Code และข้อมูลของ Bot Discord อัจฉริยะ เพื่อสั่งการทำงานได้ตามที่ต้องการ โดยไม่ต้องมาเป็นผู้ที่คัดกรอง หรือ ต้องทำงานด้วยตัวเอง

ด้วยเหตุนี้ จึงเกิดเป็นโครงงาน Bot Discord อัจฉริยะ ขึ้นมาเพื่อตอบสนองปัญหาเหล่านี้

2.วัตถุประสงค์

2.1 เพื่อให้ความบันเทิงแก่ผู้ใช้

2.2 เพื่อความสะดวกสบายในการใช้งาน

2.3 เพื่อรับรู้และเเก้ปัญหาในการเกิดการสแปมข้อความ หรือ ลิ้งค์ไวรัส

2.4 เพื่อให้สามารถทำงานได้ตลอดเวลา โดยไม่ต้องมี User มาควมคุม

3.ขอบเขต

3.1 เเสดงผลและสามารถจัดการปัญหาได้โดยอัตโนมัติ

3.2 มีสื่อและความบันเทิง สามารถ ฟังเพลง หรือ ตรวจกรองคำพูดไม่เหมาะสมและ ถามตอบได้โดยตรงจาก OPEN AI

3.3 สามารถตั้งค่าได้โดยตรงเพื่อความแม่นยำในการใช้งาน โดยสามารถระบุเหตุผลหรือค้นหาข้อมูลได้อย่างรวดเร็ว

4.ประโยชน์ที่คาดว่าจะได้รับ

4.1 ได้ทักษะการในการเขียนภาษา Python
4.2 ได้พัฒนาการออกแบบ Code และการสั่งการทำงานหลายได้อย่าง
4.3 ได้พัฒนาทักษะการเขียนโค้ดด้วยโปรแกรม Vs-Code      
4.4 ได้เรียนรู้เกี่ยวกับการใช้เทคโนโลยีให้มีประโยชน์ และต่อยอดในการทำงานได้เรื่อยๆ

5.ความรู้ที่เกี่ยวข้อง

5.1 Discord เป็นแพลตฟอร์มสื่อสารที่ได้รับความนิยมในการสร้างกลุ่มแชทและการสนทนาออนไลน์ มันถูกออกแบบมาเพื่อการสื่อสารระหว่างผู้เล่นเกม แต่ก็ได้รับการนำมาใช้ในวงกว้างสำหรับการพูดคุยทั่วไป, ประชุมทางธุรกิจ, หรือกิจกรรมออนไลน์อื่น ๆ ด้วยคุณสมบัติที่หลากหลาย เช่น การส่งข้อความ, การแชทเสียง, การแชทวิดีโอ, การแชทกลุ่ม, และการแชทส่วนตัว นอกจากนี้, Discord ยังมีฟังก์ชันการสตรีมเกมและการแชร์หน้าจอ เพื่อให้ผู้ใช้สามารถแบ่งปันประสบการณ์การเล่นเกมหรือกิจกรรมที่ต่างกันได้.

5.2 Python เป็นภาษาโปรแกรมคอมพิวเตอร์ที่มีความนิยมและใช้งานกันอย่างแพร่หลาย. มันถูกออกแบบมาให้ง่ายต่อการอ่านและเขียนโค้ด, ทำให้มันเป็นที่นิยมในการพัฒนาซอฟต์แวร์, การทดสอบ, และการพัฒนาเว็บไซต์.

5.3 Visual Studio Code (VS Code) เป็นโปรแกรมรหัส (code editor) ที่พัฒนาโดย Microsoft และเป็นโอเพนซอร์ส (open-source). มันเป็นอีกหนึ่งเครื่องมือที่ใช้ในการเขียนและแก้ไขโค้ดโปรแกรม. VS Code ได้รับความนิยมมากในวงการพัฒนาซอฟต์แวร์และเว็บไซต์.

5.4 Developer (นักพัฒนา) ใน context ของทางไอที หรือวงการไอที หมายถึง นักพัฒนาซอฟต์แวร์ หรือนักพัฒนาโปรแกรมคอมพิวเตอร์ คือผู้ที่มีความเชี่ยวชาญในการเขียน, ทดสอบ, และบำรุงรักษาโปรแกรมคอมพิวเตอร์. นักพัฒนามักจะมีความรู้และทักษะทางเทคนิคที่เกี่ยวข้องกับภาษาโปรแกรม, การออกแบบระบบ, และการใช้เครื่องมือพัฒนาต่าง ๆ.

5.5 Bot Discord คือบอทที่ถูกสร้างขึ้นเพื่อทำงานบนแพลตฟอร์ม Discord ซึ่งเป็นแพลตฟอร์มสื่อสารออนไลน์ที่มีความนิยมสำหรับการสนทนาและปฏิสัมพันธ์ในชุมชนออนไลน์. บอท Discord สามารถทำหลายอย่าง, ตั้งแต่การจัดการแชท, การส่งข้อความอัตโนมัติ, การตรวจสอบข้อมูล, และการสร้างประสบการณ์การเล่นเกมที่แตกต่างกันไป.

5.6 Code ในทางทฤษฎีคือชุดของคำสั่งหรือตัวอักษรที่ถูกเขียนขึ้นเพื่อให้คอมพิวเตอร์ทำงานตามที่ผู้เขียนโค้ดต้องการ. ในบทบาทที่แพร่หลาย, “code” หรือ “โค้ด” มักหมายถึงโค้ดที่เขียนด้วยภาษาโปรแกรมเพื่อสร้างซอฟต์แวร์หรือแอปพลิเคชันคอมพิวเตอร์.

5.7 โมดูล ส่วนจำเพาะ เป็นส่วนประกอบของระบบที่ใช้ในการเชื่อมต่อกับระบบอื่น โดยตัวโมดูลเองจะมีการออกแบบและควบคุมดัดแปลงภายในตัวโมดูลเอง

5.8 ลิ้งค์ไวรัส คือ โปรแกรมคอมพิวเตอร์ที่ทำความเสียหาย, หรือกิจกรรมที่ละเมิดกฎหมาย และนโยบายที่เกี่ยวข้อง.

5.9 API หรือ Application Programming Interface คือชุดที่ต้องพิจารณาถึงโปรแกรมคอมพิวเตอร์ที่รองรับหรือกับระบบอื่นๆ ได้แล้ว API จะกำหนดวิธีการขึ้นอยู่กับการใช้งานและข้อมูลเกี่ยวกับข้อมูล ที่ API สามารถให้บริการได้จากหลากหลายที่แตกต่างกันได้ เช่น

วิธีการหา API เพื่อเชื่อมข้อมูล

  1. สมัครสมาชิก:
    • ไปที่เว็บไซต์ของ OpenAI (https://www.openai.com/).
    • สมัครสมาชิกหรือเข้าสู่ระบบ (ถ้าคุณมีบัญชีแล้ว).
  2. เข้าหน้า API:
    • หลังจากที่เข้าสู่ระบบ, ไปที่หน้า API หรือหน้า Dashboard.
  3. สร้าง API Key:
    • สร้าง API key โดยการคลิกที่ปุ่ม “Create API Key” หรือในส่วนที่เกี่ยวข้องกับ API Key.
    • จด API key ที่ได้รับไว้ เพราะจะต้องใช้ในการทำร้องขอ API.
  4. อ่านเอกสาร API:
    • อ่านเอกสารทางเทคนิค (technical documentation) ที่ OpenAI ให้มีคำอธิบายเกี่ยวกับวิธีใช้ API รวมถึงตัวอย่างการใช้งาน, รูปแบบของข้อมูลที่คืนมา, และอื่น ๆ ที่เกี่ยวข้อง.
  5. ใช้ API Key:
    • ใช้ API key ที่ได้รับในการทำร้องขอ API ตามเอกสารทางเทคนิค.

5.10 Bot เป็นตัวย่อที่มาจากคำว่า “robot” หรือ “robotic” ซึ่งในทางกว้างขวางได้รับการใช้เพื่ออ้างถึงโปรแกรมคอมพิวเตอร์ที่ถูกสร้างขึ้นเพื่อทำงานหรือปฏิบัติหน้าที่บางอย่างโดยอัตโนมัติ โดยไม่ต้องมีความต้องการหรือมีส่วนร่วมของมนุษย์อย่างต่อเนื่อง

โมดูล ต่างๆที่ระบบต้องการใช้

โมเดล GPT-3 มีขนาดใหญ่มาก, มีพลังคำนวณมาก, และได้รับการฝึกฝนด้วยข้อมูลมหาศาลเพื่อให้มีความสามารถทั่วไปในการเข้าใจและสร้างข้อความ. ChatGPT ถูกนำมาใช้ในหลายที่, เช่นในการสนับสนุนการเขียน, การตอบคำถาม, และการสร้างประสบการณ์การสนทนาในแอปพลิเคชันต่าง ๆ.

json เป็นโมดูลที่ให้เครื่องมือสำหรับการจัดการข้อมูลในรูปแบบ JSON (JavaScript Object Notation) ซึ่งเป็นรูปแบบข้อมูลที่ใช้ในการแลกเปลี่ยนข้อมูลระหว่างเครื่องคอมพิวเตอร์ โดยมักนิยมใช้ในการส่งหรือรับข้อมูลจากเซิร์ฟเวอร์ข้อมูลจากการเรียก API (Application Programming Interface) และงานอื่น ๆ ที่เกี่ยวข้องกับการแลกเปลี่ยนข้อมูลระหว่างโปรแกรมที่เขียนด้วยภาษาต่าง ๆ

import os ในภาษา Python คือการนำเข้า (import) โมดูลที่ชื่อว่า os เพื่อให้โปรแกรมของคุณสามารถใช้ฟังก์ชันและเมธอดที่มีใน os ได้. os เป็นโมดูลที่ให้เครื่องมือสำหรับการทำงานกับระบบปฏิบัติการ (Operating System).

6.ผลการดำเนินการ

Diagram เป็นภาพรวมการทำงานของระบบ เพื่อทำให้เข้าใจการทำงานของระบบมากขึ้น โดยจะมีขั้นตอนการทำงานดังนี้

  • เริ่มศึกษาและหาข้อมูลเกี่ยวกับ ภาษา python หรือ Code ที่ใช้ในการเขียน
  • เริ่มเขียนและพัฒนา Code และทดสอบ ในโปรแกรม VS-Code
  • ศึกษา Code ที่ใช้เขียน Bot และการเขียนคำสั่งในการทำงานใน Discord Developer
  • สั่งการทำงานและใช้งานได้ใน โปรเเกรมที่เชื่อมโยงกันใน โปรแกรม Discord

Code ในการเรียกใช้และการดึงข้อมูลของ Libery มาใช้

Code ในการใช้งาน ในการสั่งการ ให้ Bot ทำงาน โดยต้องศึกษา และหาข้อมูลเพื่อให้สามารถทำงานร่วมกันได้

import json #เเลกเปลี่ยนข้อมูลระหว่างคอมพิวเตอร์ และ API
import os #ฟังก์ชัน OS
from dotenv import load_dotenv
import asyncio  #ใช้ในการบล็อกข้อความ
import discord #เรียกใช้ฟังก์ชัน
from discord import Activity, ActivityType, Intents, FFmpegPCMAudio
from discord.ext import commands, tasks
from yt_dlp import YoutubeDL
from youtube_search import YoutubeSearch
import requests as np #เรียกใช้ฟังก์ชัน 
from requests import get #เรียกใช้ฟังก์ชัน
import requests #เรียกใช้ฟังก์ชันการตอบกลับ
import logging #เรียกใช้ฟังก์ชันเพิ่มการตอบกลับใน Log ในไฟล์
import openai #เรียกใช้ฟังก์ชัน และรับขอมูลผ่าน API
import datetime #เรียกใช้ฟังก์ชันวันที่และเวลา
import tracemalloc #เรียกใช้ฟังก์ชัน

*ฟังก์ชันด้านบนเป็นการเรียกใช้ โมดูล แต่ละโมดูลที่ต้องการใช้สามารถติดตั้งด้วย CMD ได้*

tracemalloc.start()

ffmpeg_processes = {}
song_queue = {}
songs = np.empty(0, dtype=str)

# api_key chat gpt
openai.api_key = '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'

ydl_opts = {
    'format': 'bestaudio/best',
    'outtmpl': '.\\Songs\\%(id)s',
    'postprocessors': [{'key': 'FFmpegExtractAudio', 'preferredcodec': 'mp3', 'preferredquality': '192'}],
}

bot = commands.Bot(intents=Intents.all(), command_prefix='!')

def download_song(song_id: str):
    global songs
    if song_id in songs:
        return

    video_url = 'https://www.youtube.com/watch?v=' + song_id
    with YoutubeDL(ydl_opts) as ydl:
        error_code = ydl.download([video_url])
        if error_code == 0:
            songs = np.append(songs, song_id)


def get_song_info(keyword):
    result = YoutubeSearch(keyword, max_results=1).to_json()
    json_data = json.loads(result)
    return json_data['videos'][0]


def cleanup_ffmpeg_process(ctx: commands.Context, all=False):
    global ffmpeg_processes
    guild_id = ctx.guild.id
    if guild_id in ffmpeg_processes:
        if all:
            for process in ffmpeg_processes[guild_id]:
                process.cleanup()
            ffmpeg_processes[guild_id] = []
        else:
            ffmpeg_processes[guild_id][0].cleanup()
            ffmpeg_processes[guild_id].pop(0)

@bot.event
async def on_ready():
    print(f'{bot.user} is online.')
    afk_disconnect.start()
    clear_cache.start()
    await bot.change_presence(activity=Activity(type=ActivityType.listening, name='พิมพ์ !help เพื่อขอความช่วยเหลือ'))

async def disconnect_bot(ctx: commands.Context):
    cleanup_ffmpeg_process(ctx, all=True)
    voice_client = ctx.voice_client
    if voice_client.is_connected():
        song_queue[ctx.guild.id] = []
        await voice_client.disconnect()

async def connect_bot(ctx: commands.Context):
    global song_queue
    guild_id = ctx.guild.id

    if not ctx.author.voice:
        await ctx.send("**คุณไม่ได้เชื่อมต่อกับช่องเสียง**")
        return None

    author_channel = ctx.author.voice.channel
    guild_voice_client = ctx.voice_client

    if guild_voice_client in ctx.bot.voice_clients:
        if guild_voice_client.channel == author_channel:
            return guild_voice_client
        await disconnect_bot(ctx)

    song_queue[guild_id] = []
    ffmpeg_processes[guild_id] = []
    return await author_channel.connect()

@bot.command(name='leave', help='สั่งให้บอทออกจากห้องเสียง')
async def leave(ctx: commands.Context):
    await disconnect_bot(ctx)
    await ctx.message.add_reaction('\u2705')

@bot.command(name='p', help='"ชื่อเพลง" เล่นเพลง กรอกลิงค์หรือชื่อเพลง')
async def play(ctx):
    global song_queue
    guild_id = ctx.guild.id
    voice_client = await connect_bot(ctx)
    if voice_client is None:
        return

    try:
        keyword = ctx.message.content.split(" ", 1)[1]
    except IndexError:
        await ctx.send('**Type "ชื่อเพลง" เล่นเพลง กรอกลิงค์หรือชื่อเพลง**')
        return

    song_info = get_song_info(keyword)
    song_title = song_info['title']
    song_id = song_info['id']
    song_queue[guild_id].append(song_id)

    if voice_client.is_playing() or voice_client.is_paused():
        async with ctx.typing():
            loop = asyncio.get_event_loop()
            await loop.run_in_executor(None, download_song, song_id)

        await ctx.send('**เข้าคิวเล่นต่อไป:** ' + song_title)
        await ctx.message.add_reaction('\u25B6')
        return

    try:
        song_queue[guild_id].pop(0)
        async with ctx.typing():
            loop = asyncio.get_event_loop()
            await loop.run_in_executor(None, download_song, song_id)

            faudio: FFmpegPCMAudio = FFmpegPCMAudio(
                '.\\Songs\\' + song_id + '.mp3')
            ffmpeg_processes[guild_id].append(faudio)
            voice_client.play(faudio, after=lambda e: play_next_song(ctx))

        await ctx.send(f'**Now playing:** {song_title}')
        await ctx.message.add_reaction('\u25B6')
    except Exception as e:
        await ctx.send('**เกิดข้อผิดพลาดในการเล่นเพลง**')
        print(e)

def play_next_song(ctx: commands.Context, in_loop=False):
    global song_queue
    guild_id = ctx.guild.id
    voice_client = ctx.voice_client

    if voice_client.is_connected() and song_queue.get(guild_id):
        try:
            if in_loop and len(song_queue[guild_id]) > 1:
                song_id = song_queue[guild_id][1]
            else:
                song_id = song_queue[guild_id][0]
            if not in_loop or len(song_queue[guild_id]) > 1:
                song_queue[guild_id].pop(0)

            download_song(song_id)
            faudio: FFmpegPCMAudio = FFmpegPCMAudio(
                '.\\Songs\\' + song_id + '.mp3')
            ffmpeg_processes[guild_id].append(faudio)
            voice_client.play(
                faudio, after=lambda e: play_next_song(ctx, in_loop))

        except Exception as e:
            print(e)

@bot.command(name='skip', help='Skip เพลง')
async def skip(ctx: commands.Context):
    voice_client = ctx.voice_client

    if voice_client.is_connected() and (voice_client.is_playing() or voice_client.is_paused()):
        cleanup_ffmpeg_process(ctx)
        voice_client.stop()

        async with ctx.typing():
            await ctx.send('**Skipped เพลงแล้ว!**')
            await ctx.message.add_reaction('\u2705')

@bot.command(name='loop', help='"ชื่อเพลง" กรอกลิงค์หรือชื่อเพลง')
async def loop_song(ctx: commands.Context):
    global song_queue
    guild_id = ctx.guild.id
    voice_client = await connect_bot(ctx)
    if voice_client is None:
        return
    if voice_client.is_playing() or voice_client.is_paused():
        cleanup_ffmpeg_process(ctx)
        voice_client.stop()

    try:
        keyword = ctx.message.content.split(" ", 1)[1]
    except IndexError:
        await ctx.send('**"ชื่อเพลง" ลูปเพลงกรอกชื่อ**')
        return

    song_info = get_song_info(keyword)
    song_title = song_info['title']
    song_id = song_info['id']
    song_queue[guild_id] = [song_id]

    try:
        async with ctx.typing():
            loop = asyncio.get_event_loop()
            await loop.run_in_executor(None, download_song, song_id)

            faudio: FFmpegPCMAudio = FFmpegPCMAudio(
                '.\\Songs\\' + song_id + '.mp3')
            ffmpeg_processes[guild_id].append(faudio)
            voice_client.play(
                faudio, after=lambda e: play_next_song(ctx, in_loop=True))

        await ctx.send(f'**การเล่นแบบวนซ้ำ:** {song_title}')
        await ctx.message.add_reaction('🔂')
    except Exception as e:
        await ctx.send('**เกิดข้อผิดพลาดในการเล่นเพลง**')
        print(e)

@bot.command(name='pause', help='หยุดเพลง')
async def pause(ctx: commands.Context):
    voice_client = ctx.guild.voice_client
    if voice_client.is_connected() and voice_client.is_playing():
        voice_client.pause()
        await ctx.message.add_reaction('\u23F8')

@bot.command(name='resume', help='เล่นเพลงต่อ')
async def resume(ctx: commands.Context):
    voice_client = ctx.guild.voice_client
    if voice_client.is_connected() and voice_client.is_paused():
        voice_client.resume()
        await ctx.message.add_reaction('\u25B6')

@bot.command(name='stop', help='ปิดเพลง')
async def stop(ctx: commands.Context):
    global song_queue
    guild_id = ctx.guild.id
    song_queue[guild_id] = []

    voice_client = ctx.guild.voice_client
    if voice_client.is_connected() and (voice_client.is_playing() or voice_client.is_paused()):
        cleanup_ffmpeg_process(ctx, all=True)
        voice_client.stop()
        await ctx.message.add_reaction('\u23F9')

@bot.command(name='queue', help='โชว์คิวเพลงทั้งหมด')
async def view_queue(ctx: commands.Context):
    global song_queue
    song_count = 1
    song_list = ''
    guild_id = ctx.guild.id

    for song_id in song_queue.get(guild_id):
        song_list = song_list + '**' + \
            str(song_count) + '.** ' + \
            'https://www.youtube.com/watch?v=' + song_id + '\n'
        song_count += 1
    if song_list:
        await ctx.send(song_list)
    else:
        await ctx.send('**ไม่มีเพลงในคิว!**')
    await ctx.message.add_reaction('\u2705')


@bot.event
async def on_command_error(ctx: commands.Context, error: commands.CommandError):
    if isinstance(error, commands.CommandNotFound):
        await ctx.send('**คำสั่งที่ไม่รู้จัก! พิมพ์ "!help" เพื่อดูคำสั่งทั้งหมด**')
        await ctx.message.add_reaction('\u274C')


@tasks.loop(seconds=15)
async def afk_disconnect():
    for voice_client in bot.voice_clients:
        if voice_client.is_connected() and not voice_client.is_playing() and voice_client.channel.members == [bot.user]:
            await voice_client.disconnect()


@tasks.loop(hours=24)
async def clear_cache():
    global songs
    for file in os.listdir('.\\Songs'):
        try:
            os.remove('.\\Songs\\' + file)
        except Exception as e:
            print(e)

    songs = np.empty(0, dtype=str)


# คำสั่งสุ่มมีม ดึงจาก WebSite
@bot.command(name='meme', help='สุ่มมีม')
async def memess(ctx: commands.Context):
    content = get("https://meme-api.com/gimme").text
    data = json.loads(content,)
    meme = discord.Embed(title=f"{data['title']}", color = discord.Color.random()).set_image(url=f"{data['url']}")
    await ctx.send(embed=meme)
    return

# คำสั่งสุ่มภาพน้องหมา ดึงจาก WebSite
@bot.command(name='rdog', help='สุ่มน้องหมา')
async def rdog(ctx: commands.Context):
    try:
        const = requests.get("https://random.dog/woof.json")
        stuff = json.loads(const.text)
        embed = discord.Embed(title=f"URL: {stuff['url']}", color = discord.Color.random())
        embed.set_image(url=f"{stuff['url']}")
        await ctx.send(embed=embed)
    except Exception as e:
        logging.error(f"Error in {ctx.command}: {e}")
        await ctx.send(f"**โปรดตรวจสอบให้แน่ใจว่าคุณมีการเชื่อมต่ออินเทอร์เน็ต**")

@bot.event
async def on_message(message):

    if message.author == bot.user:
        return 

    username = str(message.author)
    user_message = str(message.content)
    channel = str(message.channel)

    # เงื่อนไขเช็คว่าข้อความถูกสร้างในห้องไอดีใด หากตรงจะทำการลบข้อความนั้น (กันสแปม)
    if message.channel.id == 1166481830954926150:
        await message.delete()

    msg_content = message.content.lower()

    # Array คำหยาบ (สามารถเพิ่มได้)
    curseWord = ['pussy', 'hee', 'kuy', 'ควย', 'ไอสัส', 'ไอ้สัส', 'ไอ้เวร', 'ลูกกะหรี่', 'สัส', 'โง่']
    
    if any(word in msg_content for word in curseWord):
        await message.delete()

    #ห้องแชทคนเหงา
    if message.channel.id == 1166718310029738035:
        prompt = message.content
        response = openai.Completion.create(
            engine='text-davinci-003',
            prompt=prompt,
            temperature=0.4,
            max_tokens=300, #เพิ่มจำนวนการตอบกลับข้อมูลเพื่อข้อความที่ถูกต้อง แต่อาจใช้เวลานานมากกว่าเดิม
            n = 1,
            stop = None,
            top_p = 1,
            frequency_penalty = 0.0,
            presence_penalty = 0.3
        )

        await message.channel.send(response.choices[0].text.strip())

    await bot.process_commands(message)

import urllib.request

# คำสั่งบอกเวลาปัจจุบัน
@bot.command(name='time', help='บอกเวลาปัจจุบัน')
async def timedate(ctx: commands.Context):
    current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    await ctx.send(f'ตอนนี้เวลา: {current_time}')

load_dotenv(".env")
bot.run(os.getenv('TOKEN'))
*หมายเหตุ การสั่งการทำงานในแต่ละระบบ อาจจะต้องติดตั้ง Modul ในคอมพิวเตอร์ของคุณ

ผลในการทดลองและการใช้งาน Code

7.สรุปผลการทดลองและข้อเสนอแนะ

สรุปผลการทดลอง 

  • สั่งการให้ Bot กรองคำหยาบทุกห้อง (ระบุคำหยาบได้)
  • Bot สามารถกันสแปม เตะออกดิสอัตโนมัติได้
  • Bot สามารถถามตอบ ในชื่อ (บอทแชทคนเหงา) เชื่อม API ของ OPEN AI (Chet gpt) ได้
  • Bot ฟังเพลง เปิดเพลงได้ หยุดเพลง เพิ่มเพลง และค้นหาเพลงใน Youtube ได้
  • Bot สามารถสุ่ม Meme รูปภาพได้ เพื่อความบันเทิง
  • Bot สามารถสุ่มรูปน้องหมา รูปภาพได้ เพื่อความบันเทิง
  • Bot สารมาถ ระบุ วันที่ เวลา ในปัจจุบันได้

ข้อเสนอเเนะ

  • หากต้องการเพิ่มความสามารถหรือทำงานอย่างอื่นได้เพิ่มเติม ต้องศึกษาและทำการทดสอบเพื่อให้สามารถทำงานร่วมกันได้
  • Bot จะสามารถต้องการทำงานก็ต่อเมื่อ ใช้ API และ โมดูล ของฟังก์ชันนั้นๆ โดยติดตั้งลงใน คอมพิวเตอร์ของคุณ

8.ข้อมูลอ้างอิง

การเรียนรู้ภาษา python https://www2.cs.science.cmu.ac.th/courses/204101/lib/exe/fetch.php?media=w02-w03-lab-intro-to-python.pdf

การใช้งานโปรแกรม Vs-Code https://cs.bru.ac.th/%E0%B8%AA%E0%B8%AD%E0%B8%99%E0%B8%A7%E0%B8%B4%E0%B8%98%E0%B8%B5%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%83%E0%B8%8A%E0%B9%89-visual-studio-code-2/

การใช้งาน Discord https://support.discord.com/hc/th/articles/360045138571-%E0%B8%84%E0%B8%B9-%E0%B8%A1%E0%B8%B7%E0%B8%AD%E0%B8%AA%E0%B8%B3%E0%B8%AB%E0%B8%A3%E0%B8%B1%E0%B8%9A%E0%B8%9C%E0%B8%B9-%E0%B9%80%E0%B8%A3%E0%B8%B4-%E0%B8%A1%E0%B8%95-%E0%B8%99%E0%B9%83%E0%B8%8A-Discord

การหา โมดูล และ API ในการทำงานของระบบต่างๆ ของ Bot (สามารถค้นหาข้อมูลที่ต้องการได้) https://github.com/

วีดีโอนำเสนอในการทำงานและใช้งาน

You may also like...

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *