Ping Pong Bot
Ping Pong Bot คืออะไร?
หลักการของปิงปองบอทคือเมื่อ user พิมพ์ข้อความว่า "ping" ลงใน server ตัวบอทของเราก็จะส่งข้อความว่า "pong" กลับมานั่นเอง โดยในการสร้างปิงปองบอทนั้น เริ่มจาก
1. สร้าง discord connection
ขั้นแรกให้น้องๆสร้างไฟล์ที่ชื่อว่า main.py แล้วเขียนโค้ดตามด้านล่างนี้ไป
import discord
from discord.ext import commands
TOKEN = "MTE4NDgzNTY0NDk0NjY1NzI4MA.G2fFfc.lxYxgLY-EOgh39tFfCO_MSrH10p7Ig9byjJ1vE"
client = commands.Bot(command_prefix="!", intents=discord.Intents.all())
@client.event
async def on_ready():
print(f'{client.user} has connected to Discord!')
client.run(TOKEN)
โดยน้องๆสามารถเอา token มาจากหน้า Bot ใน Developer Portal ในส่วนของ Build-A-Bot แล้วกด copy token ของบอทมาใส่
client คือ object ที่แสดงถึง discord connection, โดย client จะทำหน้าที่จัดการ event, ติดตามสถานะ , และโต้ตอบกับกับ discord APIs
ซึ่งในโค้ดด้านบน น้องๆได้สร้าง client และใช้ on_ready event ซึ่งจะถูกเรียกเมื่อ client ได้สร้างการเชื่อมต่อกับ Discord เรียบร้อยแล้ว
เมื่อน้องๆรัน python main.py ใน terminal น้องๆจะเห็นข้อความว่า "JPCBot#8035 has connected to Discord!" ขึ้นมา
2. responding to messages
import discord
from discord.ext import commands
TOKEN = "MTE4NDgzNTY0NDk0NjY1NzI4MA.G2fFfc.lxYxgLY-EOgh39tFfCO_MSrH10p7Ig9byjJ1vE"
client = commands.Bot(command_prefix="!", intents=discord.Intents.all())
@client.event
async def on_ready():
print(f'{client.user} has connected to Discord!')
@client.event
async def on_message(message):
if message.author == client.user:
return
if message.content == 'ping':
# Get the member who sent the message
member = message.author
# Send a DM to the member
await member.create_dm()
await member.dm_channel.send("pong")
# Send message to channel
await message.channel.send("pong")
client.run(TOKEN)
จากโค้ดด้านบน on_message() event จะถูกเรียกใช้เมื่อมี message ใหม่เข้ามาใน server โดยเมื่อ message ใหม่ที่เข้ามาตรงกับเงื่อนไขในโค้ดบรรทัดที่ 16 ซึ่งก็คือเมื่อ message.content == 'ping' ตัวบอทของเราจะส่งข้อความกลับมาใน channel server และใน dm ว่า pong
ในส่วนของบรรทัด 13-14 เป็นการเช็คว่าข้อความนั้นไม่ใช้ข้อความที่ส่งมาโดยตัวบอทเอง เพื่อป้องกันการเกิน loop หรือการตอบกลับที่ไม่จำเป็นในบางเคส