Skip to content

Instantly share code, notes, and snippets.

View hwahyang1's full-sized avatar
๐Ÿฆ
I may be slow to respond.

HwaHyang (KangHyeon Kim) hwahyang1

๐Ÿฆ
I may be slow to respond.
View GitHub Profile
using System;
using System.Threading.Tasks;
/// <summary>
/// TaskCompletionSource๋ฅผ ์ด์šฉํ•œ ๋น„๋™๊ธฐ ๋ฐ˜ํ™˜ ํด๋ž˜์Šค ์ž…๋‹ˆ๋‹ค.
/// JavaScript์˜ Promise๋ฅผ ๋ชจ๋ฐฉํ•œ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.
/// </summary>
/// <remarks>
/// JavaScript์—์„œ์˜ Promise (MDN Docs):
/// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
import request, json
r = requests.post("https://siro.dev/api/urls") # https://siro.dev/api/urls์— POST๋กœ ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
data = r.text # ์‘๋‹ต๊ฐ’์„ data์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค HTTP ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์›ํ•  ๊ฒฝ์šฐ, r.status_code๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
data_loaded = json.loads(data) # ์‘๋‹ต๊ฐ’์ด JSON์ด๊ธฐ์—, Python์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ€ํ™˜ ์‹œ์ผœ์ค๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  data_loaded์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
# ์ด์ œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ data_loaded["๋ฐ์ดํ„ฐ ์ด๋ฆ„"] ์œผ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! (List์˜ ๊ฒฝ์šฐ ๋ฌธ์ž์—ด(๋”ฐ์˜ดํ‘œ) ๋Œ€์‹  ์ •์ˆ˜๋ฅผ ๋„ฃ์–ด Index๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค)
# Ex : data_loaded["api"]["date"] ๋กœ "190806" ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (API ๋‹ต๋ณ€ ์ƒ {"api": {"date": "190806"}, (์ƒ๋žต)} ์˜ ๊ตฌ์กฐ์ž„)
# ---------------------------------------------------------------- #
๐ŸŒž Morning 81 commits โ–ˆโ–ˆโ–Šโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 13.7%
๐ŸŒ† Daytime 148 commits โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–Žโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 25.0%
๐ŸŒƒ Evening 299 commits โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–Œโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 50.5%
๐ŸŒ™ Night 64 commits โ–ˆโ–ˆโ–Žโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ 10.8%
# ๋ณ„๋„์˜ ๋ชจ๋“ˆ ์„ค์น˜๊ฐ€ ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์ฒ˜๋Ÿผ random ๋ชจ๋“ˆ๋งŒ ๋ถˆ๋Ÿฌ ์™€ ์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
import random
# ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋งŽ์€๋ฐ, ์ผ๋‹จ ์กฐ๊ธˆ ๋ณด๊ธฐ ์‰ฌ์šด ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌ๋ฌธ์„ ์ž‘์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
# ๋ณดํ†ต์€ if message.content == "๊ฐ€์œ„": if message.content == "๋ฐ”์œ„": ๊ฐ™์ด if๋ฅผ ๋‹ค ๋”ฐ๋กœ ์งœ์ง€๋งŒ,
# ์ด๋ฒˆ์—๋Š” ์ž…๋ ฅํ•œ ๋ช…๋ น์–ด๊ฐ€ "๊ฐ€์œ„", "๋ฐ”์œ„", "๋ณด" ์…‹ ์ค‘์— ํ•˜๋‚˜๋ผ๋ฉด ๋ฐ˜์‘ํ•˜๋„๋ก if๋ฌธ์„ ์ž‘์„ฑ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
if message.content == "๊ฐ€์œ„" or message.content == "๋ฐ”์œ„" or message.content == "๋ณด":
# ๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ, ๋‹ค๋ฅธ ๊ตฌ๋ฌธ์„ ๋จผ์ € ์งœ๊ธฐ ์ „์—, ๋ด‡์ด ๋ฌด์—‡์„ ๋‚ผ์ง€ ์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
# ๊ฐ€์œ„/๋ฐ”์œ„/๋ณด ์ด 3๊ฐ€์ง€ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์žˆ์œผ๋‹ˆ, 1๋ถ€ํ„ฐ 3๊นŒ์ง€ ์ˆ˜ ์ค‘์—์„œ ์•„๋ฌด๊ฑฐ๋‚˜ ๋ฝ‘์•„์„œ bot_response ๋ผ๋Š” ๋ณ€์ˆ˜์— ๋‹ด์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
# await ๋ฉ”์‹œ์ง€๋ณ€์ˆ˜.add_reaction("Emoji") ๋กœ ๋ฐ˜์‘์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
# ์œ ์ €๊ฐ€ ์ž…๋ ฅํ•œ ๋ช…๋ น์–ด์— ๋ฐ˜์‘์„ ๋‹ฌ๊ณ  ์‹ถ์œผ์‹œ๋ฉด '๋ฉ”์‹œ์ง€๋ณ€์ˆ˜'๋ฅผ message๋กœ,
# ์ „์†กํ•˜์‹  ๋ฉ”์‹œ์ง€์— ๋‹ด๊ณ  ์‹ถ์œผ์‹œ๋ฉด message.channel.send() ๊ตฌ๋ฌธ ์•ž์— sent = ๋ผ๊ณ  ์“ฐ์‹œ๊ณ ,
# '๋ฉ”์‹œ์ง€๋ณ€์ˆ˜'๋ฅผ sent๋กœ ์ ์œผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
# ๋ชจ๋“  ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ ๋ฐ˜์‘ ์ถ”๊ฐ€๋ฅผ ๊ฐ์ง€ํ•˜์ง€๋Š” ๋ชปํ•˜๊ณ , ํŠน์ •ํ•œ ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ ๋ฐ˜์‘๋งŒ ๊ฐ์ง€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
# ๊ทธ ์ „์—, ์•„๋ž˜์™€ ๊ฐ™์€ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์–ด๋–ค ๋ฐ˜์‘์„ ์ถ”๊ฐ€ ํ•  ๋•Œ๋งŒ ๋ฐ˜์‘ํ• ์ง€ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
def question_check(reaction, user): # question_check ๋ผ๋Š” ์ด๋ฆ„์€ ๋งˆ์Œ๋Œ€๋กœ ๋ฐ”๊พธ์…”๋„ ๋ฉ๋‹ˆ๋‹ค.
# ๋ˆ„๊ตฌ๋“ ์ง€ :one:๋ผ๋Š” ์ด๋ชจ์ง€๋‚˜ :two:๋ผ๋Š” ์ด๋ชจ์ง€๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ ๋ฐ˜์‘ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
# ๋ฉ”์‹œ์ง€ ๋‚ด์šฉ์—์„œ "!๋ช…๋ น์–ด"๋ฅผ "๊ฐ€๋‚˜๋‹ค๋ผ"๋กœ ๋ฐ”๊พผ ๋‹ค์Œ, ๋ฐ”๊พผ ๋‚ด์šฉ์„ message_replaced ๋ณ€์ˆ˜์— ๋‹ด์Šต๋‹ˆ๋‹ค.
# "๊ฐ€๋‚˜๋‹ค๋ผ"๋ฅผ ""๋กœ ๋‘์‹œ๋ฉด ๋ฉ”์‹œ์ง€ ๋‚ด์šฉ์—์„œ "!๋ช…๋ น์–ด"๋ฅผ ์ง€์›Œ๋ฒ„๋ฆฌ๋Š” ๊ตฌ๋ฌธ์ด ๋ฉ๋‹ˆ๋‹ค.
message_replaced = message.content.replace("!๋ช…๋ น์–ด", "๊ฐ€๋‚˜๋‹ค๋ผ")
# ์šฐ๋ฆฌ๊ฐ€ ๋ณดํ†ต @๋ฉ˜์…˜์„ ํ•˜๋ฉด <@์œ ์ €ID> ์˜ ํ˜•ํƒœ๋กœ ์ž…๋ ฅ๋ฉ๋‹ˆ๋‹ค.
# ์šฐ๋ฆฌ๋Š” ์ด ์ ์„ ์ด์šฉํ•ด์„œ ์œ ์ € ์ •๋ณด๋ฅผ ๋‹ด์€ ๋ณ€์ˆ˜๊นŒ์ง€ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
ids = re.findall(r'\d+', message.content) # ๋ฉ”์‹œ์ง€์—์„œ ์ˆซ์ž๋งŒ ๋‹ค ๋ฝ‘์•„๋‚ด์„œ list๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
# ์ด ์•„๋ž˜ ๊ตฌ๋ฌธ์€ ๋ช…๋ น์–ด์— ์ˆซ์ž๊ฐ€ ์—†๋‹ค๋Š” ๊ฐ€์ • ํ•˜์— ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ช…๋ น์–ด์— ์ˆซ์ž๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ, [0]์„ ๋‹ค๋ฅธ ์ˆซ์ž๋กœ ๋ฐ”๊ฟ”์ฃผ์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.
# print(ids) ๊ตฌ๋ฌธ์œผ๋กœ ๋ชจ๋“  list๋ฅผ ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ถœ๋ ฅ๋˜๋Š” ๋‚ด์šฉ์„ ์ฐธ๊ณ ํ•ด์„œ ๋‹ค๋ฅธ ์ˆซ์ž๋กœ ๋ฐ”๊ฟ”์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
# list๋Š” ['0๋ฒˆ', '1๋ฒˆ', '2๋ฒˆ', ... ] ์˜ ํ˜•ํƒœ๋กœ ์ €์žฅ๋˜๋Š”๋ฐ, ์ฒซ๋ฒˆ์งธ ๋”ฐ์˜ดํ‘œ์— ๋“ค์–ด๊ฐ€๋Š” ๋‚ด์šฉ์ด 0๋ฒˆ์ž…๋‹ˆ๋‹ค. 1๋ฒˆ ์•„๋‹™๋‹ˆ๋‹ค.
target = ids[0]
# ์ด๊ฒƒ๋„ ๋ฉ”์‹œ์ง€ ์ „์†ก ์ „์—๋งŒ ์จ์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
# url= ๋’ค์—๋Š” ์•„๊นŒ ๋ณต์‚ฌํ•œ ๋งํฌ๋ฅผ ์จ์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
# "๋‚˜๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ธ ์œ ์ €์˜ ํ”„๋กœํ•„ ์‚ฌ์ง„์„ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ๋‹ค!" ํ•˜์‹œ๋Š” ๋ถ„์€ url= ๋’ค์— ๋”ฐ์˜ดํ‘œ ์ง€์šฐ์‹œ๊ณ  message.author.avatar_url ๋„ฃ์œผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
# ์ธ๋„ค์ผ ๊ตฌ์—ญ์— ์ด๋ฏธ์ง€ ๋„ฃ๊ธฐ
embed.set_thumbnail(url="๋งํฌ")
# ๋ฉ”์‹œ์ง€ ๊ตฌ์—ญ์— ์ด๋ฏธ์ง€ ๋„ฃ๊ธฐ
embed.set_image(url="๋งํฌ")
# ์šฐ๋ฆฌ๊ฐ€ ๋ฉ”์ธ์ œ๋ชฉ๊ณผ ์„ค๋ช…์„ ์ž‘์„ฑํ–ˆ๋˜ ์ฝ”๋“œ ์•„๋ž˜์— ์จ์ค์‹œ๋‹ค.
# ๋ฉ”์‹œ์ง€ ์ „์†ก ์ „์—๋งŒ ์จ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
# add_field๋Š” ์—ฌ๋Ÿฌ ๊ฐœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ถ”๊ฐ€ํ•œ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.
embed.add_field(name="์†Œ์ œ๋ชฉ", value="์„ค๋ช…", inline=True)
# ์ด๋ฒˆ ๊ฐ•์ขŒ๋ฅผ ์œ„ํ•ด์„œ ์ถ”๊ฐ€์ ์ธ ๋ชจ๋“ˆ์€ ๋ถˆ๋Ÿฌ ์˜ฌ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ๋ฉ”์‹œ์ง€ ์ „์†ก ๊ตฌ๋ฌธ์„ ์•„๋ž˜๊ณผ ๊ฐ™์ด ๋ฐ”๊พธ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
embed = discord.Embed(title="๋ฉ”์ธ ์ œ๋ชฉ", description="์„ค๋ช…", color=0x62c1cc) # Embed์˜ ๊ธฐ๋ณธ ํ‹€(์ƒ‰์ƒ, ๋ฉ”์ธ ์ œ๋ชฉ, ์„ค๋ช…)์„ ์žก์•„์ค๋‹ˆ๋‹ค
embed.set_footer(text="ํ•˜๋‹จ ์„ค๋ช…") # ํ•˜๋‹จ์— ๋“ค์–ด๊ฐ€๋Š” ์กฐ๊ทธ๋งˆํ•œ ์„ค๋ช…์„ ์žก์•„์ค๋‹ˆ๋‹ค
await message.channel.send(embed=embed) # embed๋ฅผ ํฌํ•จ ํ•œ ์ฑ„๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
await message.channel.send("ํ•  ๋ง", embed=embed) # embed์™€ ๋ฉ”์‹œ์ง€๋ฅผ ํ•จ๊ป˜ ๋ณด๋‚ด๊ณ  ์‹ถ์œผ์‹œ๋ฉด ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.