utils.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. import discord
  2. from youtubesearchpython import VideosSearch
  3. async def on_ready_print(self):
  4. print("---------")
  5. print("Logged as")
  6. print(self.user.name)
  7. print(self.user.id)
  8. print("---------")
  9. async def receive_message_then_send(message, received: str, to_send=""):
  10. if message.content == received:
  11. if to_send:
  12. await message.channel.send(to_send)
  13. return True
  14. def get_commands_from_file(filename: str) -> tuple:
  15. with open(filename, 'r') as file:
  16. _help_commands = tuple((command.split('\n')[0] for command in file))
  17. return _help_commands
  18. async def message_is_song_name(message):
  19. return message.content.split(' ')[0] == '!song'
  20. async def _get_song_name_from_message(message):
  21. parsed_msg_list = message.content.split(' ')
  22. song_name = ' '.join(parsed_msg_list[1:])
  23. if not song_name:
  24. raise NameError("Song name can't be empty!")
  25. return song_name
  26. async def _get_movie_id(song_name):
  27. videos_search = VideosSearch(song_name, limit=1)
  28. return videos_search.result()['result'][0]['id']
  29. async def get_video_url_by_song_name(message):
  30. url = 'https://www.youtube.com/watch?v='
  31. song_name = await _get_song_name_from_message(message)
  32. if not song_name:
  33. raise NameError
  34. try:
  35. video_id = await _get_movie_id(song_name)
  36. except IndexError:
  37. raise NameError
  38. return url + video_id
  39. async def get_embed(url):
  40. return discord.Embed().set_image(url=url)
  41. async def get_commands_list_to_send(self):
  42. return "Available commands: \n" + self._help_commands_for_output
  43. async def is_embed(message):
  44. return message.content == ""
  45. async def in_bot_channel(channel=None, message=None):
  46. if message:
  47. channel = message.channel
  48. return channel.name == 'bot'
  49. async def get_message_by_id(channel, message_id):
  50. return await discord.GroupChannel.fetch_message(self=channel, id=message_id)
  51. async def _get_reaction_info(self, payload):
  52. guild = self.get_guild(payload.guild_id)
  53. member = guild.get_member(payload.user_id)
  54. print(member.name)
  55. return payload.emoji, member, payload.message_id
  56. async def create_message_and_add_reactions(self, _channel, _roles_for_send):
  57. message = await _channel.send(_roles_for_send)
  58. for key in self._emojis:
  59. await message.add_reaction(emoji=self._emojis[key])
  60. def create_and_get_roles_dict(_emojis):
  61. _roles = {}
  62. for key, i in zip(_emojis, range(1, len(_emojis) + 1)):
  63. _roles[_emojis[key]] = f"Role {i}"
  64. return _roles
  65. async def get_roles_for_send(self):
  66. roles = ""
  67. for key, value in self._roles.items():
  68. role_name = value
  69. role = await _get_role_by_name(self, role_name)
  70. roles += f"{key} ~ <@&{role.id}>\n"
  71. return roles
  72. async def _get_role_by_name(self, name):
  73. return discord.utils.get(self.guilds[0].roles, name=name)
  74. async def get_role_from_payload(self, payload, channel):
  75. emoji, reacted_user, message_id = await _get_reaction_info(self, payload)
  76. guild = channel.guild
  77. emoji = emoji.name.lower()
  78. role = discord.utils.get(guild.roles, name=self._roles[emoji])
  79. return role
  80. async def reacted_user_is_bot(self, payload):
  81. return payload.member == self.user
  82. async def get_on_delete_content(message):
  83. return f'"{message.content}"' \
  84. if not await is_embed(message) \
  85. else 'just an embed or an image.'
  86. async def get_reacted_user(self, payload):
  87. guild = self.get_guild(payload.guild_id)
  88. user = guild.get_member(payload.user_id)
  89. return user