diff --git a/bot.py b/bot.py
index d4cd75b..f15418e 100755
--- a/bot.py
+++ b/bot.py
@@ -31,7 +31,7 @@ l_extensions = (
async def _prefix_callable(bot, message: discord.message) -> list:
- extras = []
+ extras = ['.']
if message.guild is not None:
extras = bot.prefixes.get(str(message.guild.id), [])
diff --git a/cogs/basics.py b/cogs/basics.py
index f97dcbf..8df6358 100644
--- a/cogs/basics.py
+++ b/cogs/basics.py
@@ -137,7 +137,8 @@ class Basics(commands.Cog):
inline=False
)
- e.set_footer(text=f'version: {self.bot.version}')
+ e.set_footer(text=f'version: {self.bot.version} '
+ f'• prefix: {ctx.prefix}')
await ctx.send(embed=e)
diff --git a/cogs/poll.py b/cogs/poll.py
index 45002b1..bb53330 100644
--- a/cogs/poll.py
+++ b/cogs/poll.py
@@ -2,13 +2,12 @@ import json
from typing import Union
import discord
-import bcrypt
from discord.ext import commands
from yarl import URL
from bot import TuxBot
from .utils.lang import Texts
-from .utils.models import Poll
+from .utils.models import Poll, Responses
from .utils import emotes as utils_emotes
@@ -23,9 +22,11 @@ class Polls(commands.Cog):
.query(Poll) \
.filter(Poll.message_id == pld.message_id)
+ print("-------------------------25---------------------------")
if poll.count() != 0:
+ print("-------------------------27---------------------------")
poll = poll.one()
- emotes = utils_emotes.get(len(poll.responses))
+ emotes = utils_emotes.get(poll.available_choices)
if pld.emoji.name in emotes:
return poll
@@ -39,6 +40,76 @@ class Polls(commands.Cog):
await message.remove_reaction(pld.emoji.name, user)
+ @commands.Cog.listener()
+ async def on_raw_reaction_add(self, pld: discord.RawReactionActionEvent):
+ poll = self.get_poll(pld)
+
+ if poll:
+ if poll.is_anonymous:
+ try:
+ await self.remove_reaction(pld)
+ except discord.errors.Forbidden:
+ pass
+ choice = utils_emotes.get_index(pld.emoji.name)
+
+ response = self.bot.database.session.query(Poll) \
+ .filter(
+ Responses.poll_id == poll.id,
+ Responses.user == pld.user_id,
+ Responses.choice == choice
+ )
+
+ print(pld.user_id, poll.id, choice)
+
+ if response.count() != 0:
+ response = response.one()
+ self.bot.database.session.delete(response)
+ else:
+ response = Responses(
+ user=pld.user_id,
+ poll_id=poll.id,
+ choice=choice
+ )
+ self.bot.database.session.add(response)
+ self.bot.database.session.commit()
+
+ """---------------------------------------------------------------------"""
+
+ async def create_poll(self, ctx: commands.Context, poll: str, anonymous):
+ question = (poll.split('|')[0]).strip()
+ responses = [response.strip() for response in poll.split('|')[1:]]
+ emotes = utils_emotes.get(len(responses))
+
+ stmt = await ctx.send(Texts('poll', ctx).get('**Preparation...**'))
+
+ poll_row = Poll()
+ self.bot.database.session.add(poll_row)
+ self.bot.database.session.flush()
+
+ e = discord.Embed(description=f"**{question}**")
+ e.set_author(
+ name=self.bot.user if anonymous else ctx.author,
+ icon_url="https://cdn.gnous.eu/tuxbot/survey1.png"
+ )
+ for i, response in enumerate(responses):
+ e.add_field(
+ name=f"{emotes[i]} __{response.capitalize()}__",
+ value="**0** vote"
+ )
+ e.set_footer(text=f"ID: {poll_row.id}")
+
+ poll_row.channel_id = stmt.channel.id
+ poll_row.message_id = stmt.id
+ poll_row.content = e.to_dict()
+ poll_row.is_anonymous = anonymous
+ poll_row.available_choices = len(responses)
+
+ self.bot.database.session.commit()
+
+ await stmt.edit(content='', embed=e)
+ for emote in range(len(responses)):
+ await stmt.add_reaction(emotes[emote])
+
async def update_poll(self, poll_id: int):
poll = self.bot.database.session \
.query(Poll) \
@@ -102,86 +173,6 @@ class Polls(commands.Cog):
poll.content = json.dumps(content)
self.bot.database.session.commit()
- @commands.Cog.listener()
- async def on_raw_reaction_add(self, pld: discord.RawReactionActionEvent):
- poll = self.get_poll(pld)
-
- if poll:
- if poll.is_anonymous:
- try:
- await self.remove_reaction(pld)
- except discord.errors.Forbidden:
- pass
-
- user_id = str(pld.user_id).encode()
-
- choice = utils_emotes.get_index(pld.emoji.name) + 1
- responses = json.loads(poll.responses) \
- if isinstance(poll.responses, str) \
- else poll.responses
-
- if not responses.get(str(choice)):
- user_id_hash = bcrypt.hashpw(user_id, bcrypt.gensalt())
- responses \
- .get(str(choice)) \
- .append(user_id_hash.decode())
- else:
- for i, responder in enumerate(responses.get(str(choice))):
- if bcrypt.checkpw(user_id, responder.encode()):
- responses \
- .get(str(choice)) \
- .pop(i)
- break
- else:
- user_id_hash = bcrypt.hashpw(user_id, bcrypt.gensalt())
- responses \
- .get(str(choice)) \
- .append(user_id_hash.decode())
- break
-
- poll.responses = json.dumps(responses)
- self.bot.database.session.commit()
- await self.update_poll(poll.id)
-
- """---------------------------------------------------------------------"""
-
- async def make_poll(self, ctx: commands.Context, poll: str, anonymous):
- question = (poll.split('|')[0]).strip()
- responses = [response.strip() for response in poll.split('|')[1:]]
- responses_row = {}
- emotes = utils_emotes.get(len(responses))
-
- stmt = await ctx.send(Texts('poll', ctx).get('**Preparation...**'))
-
- poll_row = Poll()
- self.bot.database.session.add(poll_row)
- self.bot.database.session.flush()
-
- e = discord.Embed(description=f"**{question}**")
- e.set_author(
- name=self.bot.user if anonymous else ctx.author,
- icon_url="https://cdn.gnous.eu/tuxbot/survey1.png"
- )
- for i, response in enumerate(responses):
- responses_row[str(i + 1)] = []
- e.add_field(
- name=f"{emotes[i]} __{response.capitalize()}__",
- value="**0** vote"
- )
- e.set_footer(text=f"ID: {poll_row.id}")
-
- poll_row.message_id = stmt.id
- poll_row.channel_id = stmt.channel.id
- poll_row.content = e.to_dict()
- poll_row.is_anonymous = anonymous
- poll_row.responses = responses_row
-
- self.bot.database.session.commit()
-
- await stmt.edit(content='', embed=e)
- for emote in range(len(responses)):
- await stmt.add_reaction(emotes[emote])
-
@commands.group(name='sondage', aliases=['poll'])
async def _poll(self, ctx: commands.Context):
if ctx.invoked_subcommand is None:
@@ -192,7 +183,7 @@ class Polls(commands.Cog):
is_anonymous = '--anonyme' in poll
poll = poll.replace('--anonyme', '')
- await self.make_poll(ctx, poll, anonymous=is_anonymous)
+ await self.create_poll(ctx, poll, anonymous=is_anonymous)
def setup(bot: TuxBot):
diff --git a/cogs/utils/emotes.py b/cogs/utils/emotes.py
index c8febda..d296718 100644
--- a/cogs/utils/emotes.py
+++ b/cogs/utils/emotes.py
@@ -1,5 +1,5 @@
emotes = ['1⃣', '2⃣', '3⃣', '4⃣', '5⃣', '6⃣', '7⃣', '8⃣', '9⃣', '🔟', '0⃣',
- '🇦', '🇧', '🇨', '🇩', '🇪', '🇫', '🇬', '🇭', '🇮']
+ '🇦', '🇧', '🇨', '🇩', '🇪', '🇫', '🇬', '🇭', '🇮']
def get(count):
@@ -7,4 +7,4 @@ def get(count):
def get_index(emote):
- return emotes.index(emote)
\ No newline at end of file
+ return emotes.index(emote)
diff --git a/cogs/utils/models/__init__.py b/cogs/utils/models/__init__.py
index 2527050..9138e7e 100644
--- a/cogs/utils/models/__init__.py
+++ b/cogs/utils/models/__init__.py
@@ -1,3 +1,3 @@
from .lang import Lang
from .warn import Warn
-from .poll import Poll
\ No newline at end of file
+from .poll import Poll, Responses
diff --git a/cogs/utils/models/poll.py b/cogs/utils/models/poll.py
index d365ec3..db5a5c9 100644
--- a/cogs/utils/models/poll.py
+++ b/cogs/utils/models/poll.py
@@ -1,5 +1,5 @@
from sqlalchemy.ext.declarative import declarative_base
-from sqlalchemy import Column, Integer, Text, BigInteger, JSON, ForeignKey
+from sqlalchemy import Column, Integer, BigInteger, JSON, ForeignKey, Boolean
from sqlalchemy.orm import relationship
Base = declarative_base()
@@ -13,7 +13,9 @@ class Poll(Base):
message_id = Column(BigInteger)
content = Column(JSON)
+ is_anonymous = Column(Boolean)
+ available_choices = Column(Integer)
choice = relationship("Responses")
@@ -21,7 +23,7 @@ class Responses(Base):
__tablename__ = 'responses'
id = Column(Integer, primary_key=True, autoincrement=True)
- user = Column(Text)
+ user = Column(BigInteger)
poll_id = Column(Integer, ForeignKey('polls.id'))
choice = Column(Integer)
diff --git a/requirements.txt b/requirements.txt
index c02c3bb..7adfa7c 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -3,11 +3,11 @@ discord.py[voice]
jishaku
lxml
click
-asyncpg>=0.12.0
+asyncpg
sqlalchemy
gitpython
requests
psutil
-bcrypt
+werkzeug
tcp_latency
-yarl
\ No newline at end of file
+yarl