week 5
佾大&ㄌㄌ
本名:李佾馨
綽號:佾大
楓資 30th 社長/美宣
學習dc bot 兩個禮拜
+學長姐們的暑寒訓 ( ?
DC:yeeda
IG:zsisc30_yeeda
想找我聊天或著問東西都可以喔!
本名:李庭誼
綽號:ㄌㄌ
楓資 30th 教學長
學習dc bot 兩個禮拜
python補救中
DC:ㄌㄌ
有問題來問我我會盡量解
IG:zsisc30_lele
Discord bot
[用token]
Discord伺服器
connect
Discord bot
[用token]
Discord伺服器
事件
Discord bot
[用token]
Discord伺服器
事件
Code
執行
然後登入自己的discord帳號
按右上方New Application
然後取名選頭像就創建成功ㄌ
左方Bot
下方Privileged Gateway Intents全開
左方OAuth2
往下滑OAuth2 URL Generator找到bot打勾
往下滑選第一個administrator(全開比較方便)
複製最下方網址
在新分頁打開網址把他拉進伺服器
最後bot那頁往上滑會看到一個有token的地方
可以先複製起來
import discord
from discord.ext import commands
intents=discord.Intents.default()
intents.message_content=True
bot=commands.Bot(command_prefix='!',intents=intents)
@bot.event
async def on_ready():
print(">> bot is online <<")
@bot.command(name='hello')
async def hello(mes):
await mes.channel.send('hello world')
bot.run("這裡貼剛剛複製的token")
@commands.Cog.listener()
async def on_message(self, msg):
@commands.command(aliases = ["t-3"])
async def test_3(self, ctx):
@commands.Cog.listener()
async def on_message(self, msg):
@commands.command(aliases = ["t-3"])
async def test_3(self, ctx):
持續讀取訊息/全域性(不可呼叫)
被呼叫才有動作/局部性(可呼叫)
@bot.command()
async def pic(ctx):
pic = "照片位址"
await ctx.send(pic)
@bot.command()
async def vid(ctx):
vid = "影片連結"
await ctx.send(vid)
@bot.command()
async def say(ctx):
def user_input() -> str:
message = ctx.message.content
user_message = "" + message[6 : len(message)]
# 取出完整的 input 內容(6是前綴指令+空格的長度)
return user_message
await ctx.send(user_input())
@bot.command()
async def mention(ctx):
user = ctx.message.author.mention
await ctx.send(user)
@bot.command()
async def yeeda(ctx):
embed=discord.Embed(title="你各位早安", url="https://www.instagram.com/zsisc30_yeeda/", description="上面是我的ig 底下是資訊", color=0x9ef9ff)
embed.set_thumbnail(url = f"https://cdn.discordapp.com/attachments/1008385929846734988/1216199229316534292/105_20240301235135.png?ex=65ff84cc&is=65ed0fcc&hm=e18f707fbb6e6b76f7425bcf834e673591f3aca5b76ac1bd3618a51f4cba4a8f&")
embed.set_author(name="佾大", url="https://www.youtube.com/channel/UCnMuXeRDQlJ_SSZOAnA6xtg", icon_url="https://cdn.discordapp.com/attachments/1008385929846734988/1216199229316534292/105_20240301235135.png?ex=65ff84cc&is=65ed0fcc&hm=e18f707fbb6e6b76f7425bcf834e673591f3aca5b76ac1bd3618a51f4cba4a8f&")
embed.add_field(name="身高", value="號稱160", inline=False)
embed.add_field(name="血型", value="O", inline=True)
embed.add_field(name="星座", value="天秤", inline=True)
embed.add_field(name="生肖", value="狗", inline=True)
embed.add_field(name="想說的話", value="你各位都把講師電爛了", inline=True)
embed.set_footer(text="自介在此")
await ctx.send(embed=embed)
import asyncio
@bot.command()
async def emo_damage(ctx):
user = ctx.message.author.mention
tmpmsg = await ctx.send(user + text[random.randint(0, len(text)-1)])
#停頓3秒
await asyncio.sleep(3)
#刪除訊息
await tmpmsg.delete()
@bot.command()
async def emo_damage_add(ctx):
def user_input() -> str:
message = ctx.message.content
user_message = "" + message[17 : len(message)]
# 取出完整的 input 內容(6是前綴指令+空格的長度)
return user_message
text.append(user_input())
await ctx.send("已加入" + user_input())
@bot.command(brief='跟我說嗨', description='就是跟我說嗨')
async def hello(ctx):
await ctx.send("hello!")
@bot.event
# 當機器人完成啟動
async def on_ready():
print(f"目前登入身份 --> {bot.user}")
await bot.change_presence(status=discord.Status.idle, activity=discord.Game(name="! help 來開始!"))
bot.py
Cogs
bot主程式
程式碼
on_message
on_member_join
bot.command()
指定指令傳送訊息
其他你想要的功能
ablabla.py
react.py
event.py
在最外層創建一個cogs資料夾
創建event.py、react.py
初始化cogs
1.把你bot.py import的東西通通import過去
2.創建一個跟檔名一樣的class
3.接下來的所有程式碼都要寫在這個class下面(注意縮排)
4.在cog的最下方加上這個(不要在class裡面)
async def setup(bot):
await bot.add_cog(main(bot))
class main(commands.Cog):
def __init__(self, bot):
self.bot = bot
開始搬程式碼
@bot.command(name='hello')
async def hello(mes):
await mes.channel.send("早安世界")
△圖一,原本在bot.py的程式碼
@commands.command(name='hello')
async def hello(self,mes):
await mes.channel.send("早安世界")
△圖二,在cogs裡面的程式碼
1.@bot.command改成@commands.command
2.在def hello()的argument裡面加入self
開始搬程式碼(event)
@bot.event
async def on_message(mes):
if mes.content == "檢討":
await mes.channel.send("ㄌㄌ檢討")
△圖一,原本在bot.py的程式碼
@commands.Cog.listener()
async def on_message(self,mes):
if mes.content == "檢討":
await mes.channel.send("ㄌㄌ檢討")
△圖二,在cogs裡面的程式碼
1.@bot.event改成@commands.Cog.listener()
2.在def on_message()的argument裡面加入self
主程式呼叫
async def load_extensions():
for filename in os.listdir("./cogs"):
if filename.endswith(".py"):
await bot.load_extension(f"cogs.{filename[:-3]}")
async def main():
async with bot:
await load_extensions()
await bot.start(token)
if __name__ == "__main__":
asyncio.run(main())
@bot.command()
async def role(ctx,*mes):#tuple
for i in range(len(mes)):
if mes[i]!=' ':
await ctx.guild.create_role(name=mes[i])
arguments='\n'.join(mes)
await ctx.send(arguments)
@commands.command()
async def role(self,ctx,*mes):
for i in range(len(mes)):
if mes[i]!=' ':
await ctx.guild.create_role(name=mes[i])
arguments='\n'.join(mes)
await ctx.send(arguments)
@bot.event
async def on_raw_reaction_add(data,user):
Cog
@commands.Cog.listener()
async def on_raw_reaction_add(self, data):
@commands.Cog.listener()
async def on_raw_reaction_add(self, data):
channel = self.bot.get_channel(data.channel_id)
print(f'Reaction {data.emoji} was added in channel {channel}')
await channel.guild.create_role(name=str(data.emoji))
await channel.send(f"你創建了一個名為 {str(data.emoji)} 的身分組")
@commands.Cog.listener()
async def on_raw_reaction_add(self, data):
channel=self.bot.get_channel(data.channel_id)
print(f'Reaction {data.emoji} was added in channel {channel}')
role=await channel.guild.create_role(name=str(data.emoji))
await channel.send(f"你創建了一個名為 {str(data.emoji)} 的身分組")
await data.member.add_roles(role)
打好想創建的伺服器名稱
回到dashboard頁面,進入編輯
這裡可以重刷伺服器
(記得7-14天要重刷一次!)
前一頁的access server點進去
到前面給的第二個連結登入(密碼用底下他給的)
在這裡把檔案放上去,主檔案命名為main.py
注意:cogs等需要資料夾的用 create directory創
且要放requirements(如下)
asyncio==3.4.3
discord.py==2.3.2