karma.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. import operator
  2. from wbb import app
  3. from wbb.utils.errors import capture_err
  4. from wbb.utils.json_prettify import json_prettify
  5. from wbb.utils.dbfunctions import (update_karma, get_karma, get_karmas,
  6. int_to_alpha, alpha_to_int)
  7. from pyrogram import filters
  8. __MODULE__ = "Karma"
  9. __HELP__ = """[UPVOTE] - Use upvote keywords like "+", "+1", "thanks" etc to upvote a message.
  10. [DOWNVOTE] - Use downvote keywords like "-", "-1", etc to downvote a message.
  11. Reply to a message with /karma to check a user's karma
  12. Send /karma without replying to any message to chek karma list of top 10 users"""
  13. regex_upvote = r"^((?i)\+|\+\+|\+1|thx|tnx|ty|thank you|thanx|thanks|pro|cool|good|👍)$"
  14. regex_downvote = r"^(\-|\-\-|\-1|👎)$"
  15. @app.on_message(filters.text
  16. & filters.group
  17. & filters.incoming
  18. & filters.reply
  19. & filters.regex(regex_upvote)
  20. & ~filters.via_bot
  21. & ~filters.bot
  22. & ~filters.edited, group=3)
  23. async def upvote(_, message):
  24. if message.reply_to_message.from_user.id == message.from_user.id:
  25. return
  26. chat_id = message.chat.id
  27. user_id = message.reply_to_message.from_user.id
  28. user_mention = message.reply_to_message.from_user.mention
  29. current_karma = await get_karma(chat_id, await int_to_alpha(user_id))
  30. if current_karma:
  31. current_karma = current_karma['karma']
  32. karma = current_karma + 1
  33. new_karma = {"karma": karma}
  34. await update_karma(chat_id, await int_to_alpha(user_id), new_karma)
  35. else:
  36. karma = 1
  37. new_karma = {"karma": karma}
  38. await update_karma(chat_id, await int_to_alpha(user_id), new_karma)
  39. await message.reply_text(
  40. f'Incremented Karma of {user_mention} By 1 \nTotal Points: {karma}'
  41. )
  42. @app.on_message(filters.text
  43. & filters.group
  44. & filters.incoming
  45. & filters.reply
  46. & filters.regex(regex_downvote)
  47. & ~filters.via_bot
  48. & ~filters.bot
  49. & ~filters.edited, group=4)
  50. async def downvote(_, message):
  51. if message.reply_to_message.from_user.id == message.from_user.id:
  52. return
  53. chat_id = message.chat.id
  54. user_id = message.reply_to_message.from_user.id
  55. user_mention = message.reply_to_message.from_user.mention
  56. current_karma = await get_karma(chat_id, await int_to_alpha(user_id))
  57. if current_karma:
  58. current_karma = current_karma['karma']
  59. karma = current_karma - 1
  60. new_karma = {"karma": karma}
  61. await update_karma(chat_id, await int_to_alpha(user_id), new_karma)
  62. else:
  63. karma = 1
  64. new_karma = {"karma": karma}
  65. await update_karma(chat_id, await int_to_alpha(user_id), new_karma)
  66. await message.reply_text(
  67. f'Decremented Karma Of {user_mention} By 1 \nTotal Points: {karma}'
  68. )
  69. @app.on_message(filters.command("karma") & filters.group)
  70. async def karma(_, message):
  71. chat_id = message.chat.id
  72. if not message.reply_to_message:
  73. karma = await get_karmas(chat_id)
  74. msg = f"**Karma list of {message.chat.title}:- **\n"
  75. limit = 0
  76. karma_dicc = {}
  77. for i in karma:
  78. user_id = await alpha_to_int(i)
  79. user_karma = karma[i]['karma']
  80. user_name = (await app.get_users(user_id)).username
  81. karma_dicc[user_name] = user_karma
  82. karma_arranged = dict(sorted(karma_dicc.items(), key=lambda item: item[1], reverse=True))
  83. for username, karma_count in karma_arranged.items():
  84. if limit > 9:
  85. break
  86. msg += f"{username} : `{karma_count}`\n"
  87. limit += 1
  88. await message.reply_text(msg)
  89. else:
  90. user_id = message.reply_to_message.from_user.id
  91. karma = await get_karma(chat_id, await int_to_alpha(user_id))
  92. if karma:
  93. karma = karma['karma']
  94. await message.reply_text(f'**Total Points**: __{karma}__')
  95. else:
  96. karma = 0
  97. await message.reply_text(f'**Total Points**: __{karma}__')