สวัสดีครับ กลับมาพบกันอีกแล้ว จากพาร์ทที่แล้วที่เราคุยกันเรื่องการเขียนบอท discord ด้วย python วันนี้เรามาศึกษาโมดูล discord.py กันต่อแล้วลองมาเพิ่มลูกเล่นใหม่ๆให้กับบอทของเราบ้างดีกว่า
(ใครที่ไม่ได้อ่านพาร์ทแรก อย่าลืมไปอ่านกันที่ลิ้งค์นี้นะครับ)
เริ่มจากอะไรที่เห็นกันบ่อยๆ
แน่นอนครับ ถึงเราจะไม่สามารถตั้งสเตตัสได้ตามใจ แต่เราก็ยังตั้งสเตตัสให้บอทของเราได้ 4 แบบด้วยกันคือ playing, streaming, listening to, watching (เป็นข้อจำกัดของตัว discord API) โดยเพิ่มบรรทัดนี้เข้าไปในฟังก์ชั่น on_ready ของบอทของเราเลยครับ
await client.change_presence(activity=discord.Game(name="Dota 2")
สำหรับสเตตัสอีก 3 แบบ ก็ เปลี่ยนเป็นแบบนี้ได้เลยครับ
# สำหรับ Streaming
await client.change_presence(activity=discord.Streaming(name="my stream",url="https://www.twitch.tv/lightfurylf")) #ต้องเป็น url twitch เท่านั้นนะครับ# สำหรับ Listening to
await client.change_presence(activity=discord.Activity(type=discord.ActivityType.listening, name="a song"))
# สำหรับ Watching
await client.change_presence(activity=discord.Activity(type=discord.ActivityType.watching, name="a movie"))
ต่อไป มาดูลูกเล่นของบอทตัวอื่นที่เราเห็นบ่อยๆกัน
ที่เห็นแบบที่ rythm ส่งข้างบนนั้น discord เรียกว่า embed ครับ โดยเราก็สามารถสร้าง embed เองได้ง่ายๆ แบบนี้(ก็อปใส่ในฟังก์ชั่น on_message นะครับ)
if message.content.startswith('-embed'): embed = discord.Embed(title = "Sample Embed", url="https://purewaage.medium.com/", description = "this is embed description", color=0xFF0000) await message.channel.send(embed=embed)
รหัสสีที่ใช้คือ hex นะครับ(FF0000 คือสีแดง) ถ้าอยากได้สีอะไรโดยเฉพาะลองใช้ google color picker หรือไม่ก็พวก photoshop ดูได้ครับ
เอ๊ะ แล้วรูปข้างบนแบบที่ rythm ส่งมาล่ะ ทำยังไงนะ
เราก็เช็ทรูปให้กับ embed ของเราได้ครับ โดยใช้คำสั่ง set_thumbnail และใส่ url ของรูปที่เราต้องการให้ส่งไปครับ
embed.set_thumbnail(url = "https://discord.com/assets/ff41b628a47ef3141164bfedb04fb220.png")
หลังจากนั้นก็เซ็ท author (ผู้ส่ง) โดยใส่ข้อมูลชื่อ, url และ urlของรูปแบบนี้เลยครับ
embed.set_author(name="Sender's name", url="https://purewaage.medium.com/", icon_url="https://cdn-images-1.medium.com/fit/c/38/38/1*ASCR6XdKD0DQDqtZfhuDPA.jpeg")
ต่อไป ถ้าอยากให้บอทส่งอีโมจิได้ล่ะ ข้อความเราจะได้มีลูกเล่นขึ้นมาอีก
สำหรับอีโมจิของ discord สามารถส่งโดยแทรกชื่ออีโมจิลงไประหว่างเครื่องหมาย :
สองตัวได้เลยครับ อย่างเช่นแบบนี้
await message.channel.send(":thumbup:")
โดยดิสคอทจะแปลงสตริงส่วนนี้เป็นอีโมจิให้อัตโนมัติครับ
สมมุติผมลองใส่อีโมจิเพิ่มลงในโค้ดส่วนที่ดึงราคาบิตคอยท์แบบนี้(โค้ดจากพาร์ทที่แล้วนะครับ)
if message.content.startswith('-btc'): response = requests.get('https://api.coindesk.com/v1/bpi/currentprice.json') data = response.json() #print(data) await message.channel.send(":money_mouth: Current price is " + data["bpi"]["USD"]["rate"] + " US Dollar")
แต่ว่า บางทีในเซิฟเวอร์เราก็มีอีโมจิที่ทำเล่นๆ แล้วอยากให้บอทส่งได้ด้วยใช่ไหมล่ะ อยากสมมุติเซิฟผมมีอีโมจิรูป bitcoin แบบนี้ เราจะให้บอทส่งได้ยังไงล่ะ
เริ่มแรก เราต้องหาemoji ID ของอีโมจิตัวนี้ก่อนครับ วิธีที่ง่ายที่สุดก็คือ ไปที่ช่องแชทสักช่องนึงแล้วพิมพ์ \:ชื่ออีโมจิ:
แล้วกดส่งดูครับ อย่างผมจะพิมพ์ \:Bitcoin:
แค่นี้เลยครับ เราก็ก็อปไอดีนี้ไปใส่ในโค้ดของเราได้เลย
เหมือนเดิมครับ ใครที่อยากได้โค้ดทั้งหมดที่ผมทำในบทความนี้ ก็อปได้จากข้างล่างเลยนะครับ
import discord
import request
from flask import Flask
from threading import Threadclient = discord.Client()
app = Flask('')@app.route('/')
def main():
return "Your Bot Is Ready"
def run():
app.run(host="0.0.0.0", port=8000)
def keep_alive():
server = Thread(target=run)
server.start()keep_alive()@client.event
async def on_ready():
await client.change_presence(activity=discord.Game(name="Dota 2")
print('We have logged in as {0.user}'.format(client))@client.event
async def on_message(message):
if message.author == client.user:
return if message.content.startswith('-hello'):
await message.channel.send('Hello!') if message.content.startswith('-embed'):
embed = discord.Embed(title = "Sample Embed", url="https://purewaage.medium.com/", description = "this is embed description", color=0xFF0000)
embed.set_thumbnail(url = "https://discord.com/assets/ff41b628a47ef3141164bfedb04fb220.png")
embed.set_author(name="Sender's name", url="https://purewaage.medium.com/", icon_url="https://cdn-images-1.medium.com/fit/c/38/38/1*ASCR6XdKD0DQDqtZfhuDPA.jpeg")await message.channel.send(embed=embed)if message.content.startswith('-btc'):
response = requests.get('https://api.coindesk.com/v1/bpi/currentprice.json')
data = response.json()
#print(data)
await message.channel.send("<:Bitcoin:855289805436747816> Current price is " + data["bpi"]["USD"]["rate"] + " US Dollar")client.run('ODUyMDg5OTU0ODA0NDMyOTA3.YMBwnA.fTElyy-uFiwx2vFq4yufjxxx-nY')
บทความนี้ก็ขอจบแต่เพียงเท่านี้ครับ แต่ตัวmodule discord.py ยังมีอะไรให้เล่นอีกเยอะมากกก ถ้าใครสนใจอยากลองศึกษาต่อสามารถอ่าน docs จากทางผู้พัฒนาได้ที่ลิ้งค์นี้เลยครับ ตัวผมเองก็อ่านอยู่ ไว้เจออะไรที่น่าสนใจจะเอามาเล่าให้ฟังอีกครับ แล้วพบกันใหม่นะครับ
สวัสดีครับ