2
2
from discord .ext import commands , tasks
3
3
from datetime import datetime , timedelta
4
4
import json
5
+ import time
5
6
import os
6
7
import asyncio
7
8
from youtube_search import YoutubeSearch
10
11
from koreanbots .integrations .discord import DiscordpyKoreanbots
11
12
import random
12
13
import re
13
-
14
+ start_times = time . time ()
14
15
why = ['으에?' , '몰?루' , '왜요용' , '잉' , '...?' , '몰라여' , '으에.. 그게 뭐징?' , '네?' ]
15
16
16
17
class Bot (commands .Bot ):
17
18
def __init__ (self , intents : discord .Intents , ** kwargs ):
18
- super ().__init__ (command_prefix = ["/" , "시이 " ], intents = intents , case_insensitive = True )
19
+ super ().__init__ (command_prefix = ["/" , "!" , " 시이 " ], intents = intents , case_insensitive = True )
19
20
20
21
async def on_ready (self ):
21
22
print (f"Logged in as { self .user } " )
@@ -459,6 +460,7 @@ async def guess_number(interaction: discord.Interaction, number: int):
459
460
game = None
460
461
461
462
463
+
462
464
@bot .hybrid_command (name = '업다운종료' , description = "업다운게임 종료하기" )
463
465
async def end_game (interaction : discord .Interaction ):
464
466
global game
@@ -469,6 +471,19 @@ async def end_game(interaction: discord.Interaction):
469
471
await interaction .send ('업다운 게임이 종료되었습니다.' )
470
472
471
473
474
+ @bot .hybrid_command (name = "고양이" , description = "랜덤으로 고양이 사진을 불러옵니다" )
475
+ async def cat (interaction : discord .Interaction ):
476
+ cat_image_url = get_random_cat ()
477
+ await interaction .send (cat_image_url )
478
+
479
+
480
+ def get_random_cat ():
481
+ response = requests .get ('https://api.thecatapi.com/v1/images/search' )
482
+ data = response .json ()
483
+ return data [0 ]['url' ]
484
+
485
+
486
+
472
487
@bot .hybrid_command (name = '급식' , description = "학교급식 2주 정보 보기" )
473
488
async def school_lunch (interaction : discord .Interaction , school_name : str ):
474
489
school_code = get_school_code (school_name )
@@ -544,11 +559,6 @@ async def search(interaction: discord.Interaction, *, query):
544
559
await interaction .send (embed = embed )
545
560
546
561
547
- @bot .hybrid_command (name = '따라하기' , description = "메세지 복제" )
548
- async def copy (interaction : discord .Interaction , text1 : str ):
549
- await interaction .send (text1 )
550
-
551
-
552
562
@bot .hybrid_command (name = '유튜브검색' , description = "유튜브 검색(베타)" )
553
563
async def youtube_search (interaction : discord .Interaction , * , query : str ):
554
564
results = YoutubeSearch (query , max_results = 1 ).to_dict ()
@@ -561,6 +571,7 @@ async def youtube_search(interaction: discord.Interaction, *, query: str):
561
571
await interaction .send ('검색 결과를 찾을 수 없습니다.' )
562
572
563
573
574
+
564
575
@bot .hybrid_command (name = '계산' , description = "수식을 계산합니다." )
565
576
async def calculate_expression (ctx , * , expression ):
566
577
try :
@@ -667,23 +678,31 @@ async def announcement(interaction: discord.Interaction):
667
678
await interaction .send (embed = embed )
668
679
669
680
681
+ def get_timestamp ():
682
+ return int (time .time ())
683
+
684
+
670
685
@bot .hybrid_command (name = '핑' , description = "퐁!" )
671
686
async def ping (interaction : discord .Interaction ):
672
- message_latency = round (bot .latency * 1000 , 2 ) # 밀리초로 변환하여 반올림
687
+ message_latency = round (bot .latency * 1000 , 2 )
688
+
673
689
start_time = interaction .message .created_at
674
690
message5 = await interaction .send ("메시지 핑 측정중..." )
675
- end_time = message5 .created_at # 메시지를 전송한 시간
691
+ end_time = message5 .created_at
676
692
await message5 .delete ()
677
693
latency = (end_time - start_time ).total_seconds () * 1000
678
- current_time = datetime .now ()
679
- uptime = current_time - start_time
694
+
695
+ current_time = time .time ()
696
+ uptime_seconds = current_time - start_times
697
+ uptime_minutes = uptime_seconds // 60
698
+
680
699
embed = discord .Embed (title = "퐁!" , color = 0xFFB2F5 )
681
700
embed .add_field (name = f'REST ping' , value = f"```{ latency } ms```" )
682
701
embed .add_field (name = f'Gateway ping' , value = f"```{ message_latency } ms```" )
683
- embed .add_field (name = f'업타임' , value = f"```{ uptime } ```" )
702
+ embed .add_field (name = f'업타임' , value = f"```{ uptime_minutes } 분 ```" )
684
703
list_length = len (bot .guilds )
685
704
embed .add_field (name = "서버수" , value = f"```{ list_length } ```" )
686
- embed .set_footer (text = '{}' .format (get_time ()))
705
+ embed .set_footer (text = '{}' .format (get_timestamp ()))
687
706
await interaction .send (embed = embed )
688
707
689
708
@@ -703,16 +722,38 @@ async def roll(interaction: discord.Interaction):
703
722
print (f'주사위 결과는 { randnum } 입니다.' )
704
723
705
724
706
- @bot .hybrid_command (name = '프로필' , description = "프로필" )
707
- async def embed (interaction : discord .Interaction ):
708
- embed = discord .Embed (title = "shii-bot <:__:1201865120368824360>" , description = "made by 보란이" , color = 0xFFB2F5 )
709
- embed .add_field (name = "사용가능 명령어" , value = "시이야, /프로필, /따라하기, /메시지청소, /주사위, /광질, /가위바위보, /유튜브검색 등등등..." ,
710
- inline = False )
711
- embed .add_field (name = "사용법" , value = "/를 사용하여 불러주세요!" , inline = False )
712
- embed .add_field (name = "호스팅" , value = "구글 클라우드 플렛폼(GCP)" , inline = False )
713
- embed .add_field (name = "패치버전" , value = "v2.14.7" , inline = False )
714
- embed .set_footer (
715
- text = "개인 정보 처리 방침: https://github.com/boranloves/shii-bot-discord/blob/main/%EA%B0%9C%EC%9D%B8%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EB%B0%A9%EC%B9%A8.txt" )
725
+ @bot .hybrid_command (name = '프로필' , description = "프로필를 봅니다" )
726
+ async def dp (interaction : discord .Interaction , member : discord .Member = None ):
727
+ print (member )
728
+ if not member :
729
+ member = interaction .user
730
+ embed = discord .Embed (color = 0xFFB2F5 )
731
+ embed .set_image (url = member .avatar )
732
+ await interaction .send (embed = embed )
733
+
734
+
735
+ @bot .hybrid_command (name = "내정보" , description = '내 정보를 봅니다' )
736
+ async def propill (interaction : discord .Interaction ):
737
+ member = interaction .author
738
+ roles = member .roles
739
+ role_names = [role .name for role in roles ]
740
+ server_id = str (interaction .guild .id )
741
+ user_id = str (interaction .author .id )
742
+ user_name = str (interaction .author .display_name )
743
+ current_happiness = happiness_manager .get_user_happiness (server_id , user_id )
744
+ server_id = str (interaction .guild .id )
745
+ user_id = str (interaction .author .id )
746
+ capital = load_capital ()
747
+ embed = discord .Embed (title = f"{ user_name } 님의 정보" , color = 0xFFB2F5 )
748
+ if not member :
749
+ member = interaction .user
750
+ embed .set_thumbnail (url = member .avatar )
751
+ embed .add_field (name = "호감도" , value = f":heart: { current_happiness } " )
752
+ if server_id in capital and user_id in capital [server_id ]:
753
+ embed .add_field (name = "자본" , value = f"${ capital [server_id ][user_id ]} " )
754
+ else :
755
+ embed .add_field (name = "자본" , value = "아직 주식을 시작하지 않았습니다." )
756
+
716
757
await interaction .send (embed = embed )
717
758
718
759
@@ -742,11 +783,11 @@ async def help(interaction: discord.Interaction):
742
783
embed = discord .Embed (title = "안녕하세요, 시이입니다!" , description = "귀여운 챗봇 하나쯤, 시이\n '시이야'라고 불러주세요!" , color = 0xFFB2F5 )
743
784
embed .set_thumbnail (url = 'https://cdn.litt.ly/images/d7qircjSN5w6FNgD5Oh57blUjrfbBmCj?s=1200x1200&m=outside&f=webp' )
744
785
embed .add_field (name = "**일반**" , value = "핑, 하트, 번역, 패치노트, 네이버검색, 유튜브검색, 블로그검색, 계산, 인원통계, 타이머, 프로필, 급식, 메모쓰기, 메모불러오기, 공지사항, 패치노트" , inline = False )
745
- embed .add_field (name = "**재미**" , value = "알려주기, 급식, 호감도확인, 호감도도움말, 가위바위보, 광질, 주사위, 업다운시작, 업다운, 설날" , inline = False )
786
+ embed .add_field (name = "**재미**" , value = "고양이 , 알려주기, 급식, 호감도확인, 호감도도움말, 가위바위보, 광질, 주사위, 업다운시작, 업다운, 설날" , inline = False )
746
787
embed .add_field (name = "**주식**" , value = "주식매수, 주식매도, 가격보기, 자본" )
747
788
embed .add_field (name = "**보이스**" , value = "음성채널입장, 음성채널퇴장" , inline = False )
748
- embed .add_field (name = "**관리**" , value = "클리어, 임베드생성" , inline = False )
749
- embed .set_footer (text = "버전: v2.14 .7" )
789
+ embed .add_field (name = "**관리**" , value = "내정보, 프로필, 클리어, 임베드생성" , inline = False )
790
+ embed .set_footer (text = "버전: v2.15 .7" )
750
791
await interaction .send (embed = embed )
751
792
752
793
@@ -761,14 +802,14 @@ async def hhlep(interaction: discord.Interaction):
761
802
762
803
@bot .hybrid_command (name = "패치노트" , description = "시이봇 패치노트 보기" )
763
804
async def pt (interaction : discord .Interaction ):
764
- embed = discord .Embed (title = "v2.14 .7 패치노트" , color = 0xFFB2F5 )
765
- embed .add_field (name = "신규기능" , value = "/와 함깨 시이 로 명령어를 실행가능 하게 변경 " , inline = False )
805
+ embed = discord .Embed (title = "v2.15 .7 패치노트" , color = 0xFFB2F5 )
806
+ embed .add_field (name = "신규기능" , value = "신규 커멘드 /고양이, /내정보 추가, /프로필 코드 수정, 접두사 ! 추가 " , inline = False )
766
807
embed .add_field (name = "버그 수정" , value = "없음" ,
767
808
inline = False )
768
809
await interaction .send (embed = embed )
769
810
770
811
771
- @bot .hybrid_command (name = '알려주기 ' , description = '시이봇에게 많은걸 알려주세요!(베타)' )
812
+ @bot .hybrid_command (name = '가르치기 ' , description = '시이봇에게 많은걸 알려주세요!(베타)' )
772
813
async def tell (interaction : discord .Interaction , keyword : str , * , description : str ):
773
814
bot_info = load_bot_info ()
774
815
server_id = str (interaction .guild .id )
@@ -833,104 +874,83 @@ async def check_happiness(interaction: discord.Interaction):
833
874
await interaction .send (embed = embed )
834
875
835
876
bad_words = ['ㅆㅂ' , '씨발' , '좆' , 'ㅈ까' , 'ㅈㄹ' , '지랄' , '느금마' , '니애미' , '옘병' ]
836
-
837
-
838
- @bot .hybrid_command (name = '레벨확인' , description = '레벨을 확인합니다.' )
839
- async def lv_see (interaction : discord .Interaction ):
840
- server_id = str (interaction .guild .id )
841
- user_id = str (interaction .author .id )
842
- if user_id in experience and server_id in experience [user_id ]:
843
- level = experience [user_id ][server_id ]['level' ]
844
- exp = experience [user_id ][server_id ]['exp' ]
845
- embed = discord .Embed (title = f"{ interaction .author .display_name } 의 정보" , color = 0xFFB2F5 )
846
- embed .add_field (name = f"lv.{ level } " , value = f"경험치: { exp } " )
847
- await interaction .send (embed = embed )
848
- else :
849
- await interaction .send (f"{ interaction .author .mention } 님의 정보를 찾을 수 없습니다." )
850
-
877
+ wordshii = ['넹!' , '왜 그러세용?' , '시이예용!' , '필요 하신거 있으신가요?' , '뭘 도와드릴까요?' , '반가워용' , '저 부르셨나요?' , '왜요용' , '잉' , '...?' , '네?' ]
851
878
852
879
@bot .event
853
880
async def on_message (message ):
854
881
if message .author == bot .user :
855
882
return
856
- user_id = str (message .author .id )
857
- server_id = str (message .guild .id )
858
- if user_id not in experience :
859
- experience [user_id ] = {}
860
- if server_id not in experience [user_id ]:
861
- experience [user_id ][server_id ] = {'exp' : 0 , 'level' : 1 }
862
- experience [user_id ][server_id ]['exp' ] += 1
863
- if experience [user_id ][server_id ]['exp' ] >= 2 * experience [user_id ][server_id ]['level' ]:
864
- experience [user_id ][server_id ]['level' ] += 1
865
- experience [user_id ][server_id ]['exp' ] = 0
866
- save_experience ()
867
-
868
- if message .content .startswith ('시이야 ' ):
869
- message1 = message .content [4 :]
870
- bot_info = load_bot_info ()
871
- server_id = str (message .guild .id )
872
- user_id = str (message .author .id )
873
- happiness_manager .increment_user_happiness (server_id , user_id , amount = 1 )
874
- happiness_manager .save_to_file ()
875
- info = bot_info .get (message1 )
876
- word = {
877
- f'{ message .author .display_name } ' : f"저가 { message .author .display_name } 님을 모를리 없죠!" ,
878
- 'hello' : '안녕하세욧!' ,
879
- '안녕' : '안녕하세요. 시이입니다!' ,
880
- '누구야' : '안녕하세요. shii입니다!' ,
881
- '요일' : ':calendar: 오늘은 {}입니다' .format (get_day_of_week ()),
882
- '시간' : ':clock9: 현재 시간은 {}입니다.' .format (get_time ()),
883
- '코딩' : '코딩은 재밌어요' ,
884
- '게임' : '게임하면 또 마크랑 원신을 빼놀수 없죠!' ,
885
- 'ㅋㅋㅋ' : 'ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ' ,
886
- '이스터에그' : '아직 방장님이 말 하지 말라고 했는데....아직 비밀이예욧!' ,
887
- '패치버전' : '패치버전 v2.14.7' ,
888
- '과자' : '음...과자하니까 과자 먹고 싶당' ,
889
- '뭐해?' : '음.....일하죠 일! 크흠' ,
890
- '음성채널' : '음성채널는 현재 방장이 돈이 없어서 불가능 합니다ㅠㅠ' ,
891
- '이벤트' : '흐음..이벤트는 아직 없어요ㅠㅠ' ,
892
- '웃어' : '히힛 ( ^▽^)' ,
893
- '맴매' : '흐에에엥ㅠㅠㅜ방장님! 도와주세여(/´△`\)' ,
894
- '옥에티' : '옥에티가 있을것같아요? 네, 아마 있을거예요 방장님이 아직 초짜라' ,
895
- '잔소리해줘' : '잔소리는 나쁜거예요 알겠어요?' ,
896
- '유튜브' : '유튜브 검색 기능은 /유튜브검색 으로 실행이 가능합니다!' ,
897
- '크레딧' : '전부다 보란이(그렇게 써있음 ㅇㅇ)' ,
898
- '구멍' : '구멍' ,
899
- '개발자님' : '개발자님이요? 좀, 쪼잔하긴해요(소곤소곤)' ,
900
- '종' : '댕댕대에에엥' ,
901
- '할말없어?' : '할말이요? 할말이요? 할말이요? 할말이요? 할말이요? 할말이요? 없어욧!' ,
902
- '왭연동' : '사이트 및 뉴스 연동은 현재는 업데이트 일정에 없습니다' ,
903
- '애교' : '이이잉...시져ㅕㅕㅕ' ,
904
- '야근' : '설마...야근 시킬 생각은 아니시죠?' ,
905
- '아이싯떼루' : '웩' ,
906
- '애니' : '~개발자왈~ 백성녀와 흑목사는 꼭 봐라' ,
907
- '축구경기' : '축구 경기 연동 기능은 현재 개발중 입니다. 빠른 시일내에 완성 하겠습니다!' ,
908
- 'help' : '저와 대화 하실려면 시이야 뒤에 질문을 넣어 불러주세요!' ,
909
- '음악' : '우리 개발자님은 류현준님의 노래를 좋아한데요. 네, TMI네용' ,
910
- 'GCP' : '지금 시이봇은 GCP에서 실행되고 있습니다!' ,
911
- '뭐야' : '뭐지?' ,
912
- '잘가' : '잘가요!' ,
913
- '뭐들어?' : '앗, 류현준님의 난간이욧!' ,
914
- '베타커멘드' : '베타 커멘드는 현재 태스트 중인 커멘드 입니다! 언제 생기고 사라질지 모르죠' ,
915
- '시이이모지' : "<:__:1201865120368824360>"
916
- }
917
- if message1 == '' or None :
918
- whyresponse = random .randint (0 , 7 )
919
- response = why [whyresponse ]
920
- await message .channel .send (response )
883
+ if message .content .startswith ('시이야' ):
884
+ if not message .content .startswith ('시이야 ' ):
885
+ wordss = random .randint (0 , 10 )
886
+ await message .channel .send (wordshii [wordss ])
921
887
return
922
- elif message1 in word .keys ():
923
- return await message .channel .send (word [message1 ])
924
- else :
925
- if info :
926
- author_nickname = info ['author_nickname' ]
927
- description = info ['description' ]
928
- response = f"{ description } \n ```{ author_nickname } 이(가) 알려줬어요!```"
929
- await message .channel .send (response )
930
- else :
888
+ if message .content .startswith ('시이야 ' ):
889
+ message1 = message .content [4 :]
890
+ bot_info = load_bot_info ()
891
+ server_id = str (message .guild .id )
892
+ user_id = str (message .author .id )
893
+ happiness_manager .increment_user_happiness (server_id , user_id , amount = 1 )
894
+ happiness_manager .save_to_file ()
895
+ info = bot_info .get (message1 )
896
+ word = {
897
+ f'{ message .author .display_name } ' : f"저가 { message .author .display_name } 님을 모를리 없죠!" ,
898
+ 'hello' : '안녕하세욧!' ,
899
+ '안녕' : '안녕하세요. 시이입니다!' ,
900
+ '누구야' : '안녕하세요. shii입니다!' ,
901
+ '요일' : ':calendar: 오늘은 {}입니다' .format (get_day_of_week ()),
902
+ '시간' : ':clock9: 현재 시간은 {}입니다.' .format (get_time ()),
903
+ '코딩' : '코딩은 재밌어요' ,
904
+ '게임' : '게임하면 또 마크랑 원신을 빼놀수 없죠!' ,
905
+ 'ㅋㅋㅋ' : 'ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ' ,
906
+ '이스터에그' : '아직 방장님이 말 하지 말라고 했는데....아직 비밀이예욧!' ,
907
+ '패치버전' : '패치버전 v2.15.7' ,
908
+ '과자' : '음...과자하니까 과자 먹고 싶당' ,
909
+ '뭐해?' : '음.....일하죠 일! 크흠' ,
910
+ '음성채널' : '음성채널는 현재 방장이 돈이 없어서 불가능 합니다ㅠㅠ' ,
911
+ '이벤트' : '흐음..이벤트는 아직 없어요ㅠㅠ' ,
912
+ '웃어' : '히힛 ( ^▽^)' ,
913
+ '맴매' : '흐에에엥ㅠㅠㅜ방장님! 도와주세여(/´△`\)' ,
914
+ '옥에티' : '옥에티가 있을것같아요? 네, 아마 있을거예요 방장님이 아직 초짜라' ,
915
+ '잔소리해줘' : '잔소리는 나쁜거예요 알겠어요?' ,
916
+ '유튜브' : '유튜브 검색 기능은 /유튜브검색 으로 실행이 가능합니다!' ,
917
+ '크레딧' : '전부다 보란이(그렇게 써있음 ㅇㅇ)' ,
918
+ '구멍' : '구멍' ,
919
+ '개발자님' : '개발자님이요? 좀, 쪼잔하긴해요(소곤소곤)' ,
920
+ '종' : '댕댕대에에엥' ,
921
+ '할말없어?' : '할말이요? 할말이요? 할말이요? 할말이요? 할말이요? 할말이요? 없어욧!' ,
922
+ '왭연동' : '사이트 및 뉴스 연동은 현재는 업데이트 일정에 없습니다' ,
923
+ '애교' : '이이잉...시져ㅕㅕㅕ' ,
924
+ '야근' : '설마...야근 시킬 생각은 아니시죠?' ,
925
+ '아이싯떼루' : '웩' ,
926
+ '애니' : '~개발자왈~ 백성녀와 흑목사는 꼭 봐라' ,
927
+ '축구경기' : '축구 경기 연동 기능은 현재 개발중 입니다. 빠른 시일내에 완성 하겠습니다!' ,
928
+ 'help' : '저와 대화 하실려면 시이야 뒤에 질문을 넣어 불러주세요!' ,
929
+ '음악' : '우리 개발자님은 류현준님의 노래를 좋아한데요. 네, TMI네용' ,
930
+ 'GCP' : '지금 시이봇은 GCP에서 실행되고 있습니다!' ,
931
+ '뭐야' : '뭐지?' ,
932
+ '잘가' : '잘가요!' ,
933
+ '뭐들어?' : '앗, 류현준님의 난간이욧!' ,
934
+ '베타커멘드' : '베타 커멘드는 현재 태스트 중인 커멘드 입니다! 언제 생기고 사라질지 모르죠' ,
935
+ '시이이모지' : "<:__:1201865120368824360>"
936
+ }
937
+ if message1 == '' or None :
931
938
whyresponse = random .randint (0 , 7 )
932
939
response = why [whyresponse ]
933
940
await message .channel .send (response )
941
+ return
942
+ elif message1 in word .keys ():
943
+ return await message .channel .send (word [message1 ])
944
+ else :
945
+ if info :
946
+ author_nickname = info ['author_nickname' ]
947
+ description = info ['description' ]
948
+ response = f"{ description } \n ```{ author_nickname } 이(가) 알려줬어요!```"
949
+ await message .channel .send (response )
950
+ else :
951
+ whyresponse = random .randint (0 , 7 )
952
+ response = why [whyresponse ]
953
+ await message .channel .send (response )
934
954
await bot .process_commands (message )
935
955
936
956
0 commit comments