def PieChart(): aa = scraperwiki.datastore.retrieve({"party": None}) d = {} for a in aa: p = a["data"]["party"] if p not in d: d[p] = 0 d[p] += 1 chart = pygooglechart.PieChart3D(550, 200, colours=["556600"]) # put in descending order ld = [(v, k) for k, v in d.items()] ld.sort() ld.reverse() # truncate at 10 items if len(ld) > 7: rest = sum([v for v, k in ld[7:]]) ld[7] = (rest, "other") del ld[8:] chart.add_data([v for v, k in ld]) chart.set_pie_labels([k for v, k in ld]) chart.set_title("Leaflets pr party") scraperwiki.metadata.save("chart", chart.get_url())
def MakeAgePie(): ages = defaultdict(int) for ddrow in scraperwiki.datastore.retrieve({"Age": None}): age = ddrow["data"]["Age"] ages[age] += 1 print ages chart = pygooglechart.PieChart3D(350, 150, colours=["55CC00", "990033"]) chart.add_data(ages.values()) chart.set_pie_labels(ages.keys()) chart.set_title("Age") scraperwiki.metadata.save("chart", chart.get_url())
def get_chart(self, answers): """generate chart""" total, answered, unanswered, per_choice = self.calculate( self.question, answers) chart = pygooglechart.PieChart3D(600, 170) # data data = [i[1] for i in per_choice] data.append(unanswered[1]) chart.add_data(data) # legend catalog = self.getPortalTranslations() legend = list(self.question.getChoices()) legend.append( catalog('Not answered', lang=self.gl_get_selected_language(), add=True)) chart.set_pie_labels(legend) return chart
async def lanosch(self, ctx, *arg): """2019-es Lanosch CS:GO bajnoksággal kapcsolatos dolgok. Help: ?lanosch help""" try: arg[0] = arg[0].lower() except Exception: # ha üres a string pass try: # ha nem kap paramétert if not arg: if ctx.author.id != 194506678966812672: file = open( "/srv/shared/Simi/programozas/discordbot/0lanosch.txt", "r+") volt = False for line in file: line = line.split("\t")[0] if int(line) == ctx.message.author.id: volt = True break if not volt: file.write( f"{ctx.author.id}\t{ctx.author.display_name}\n") role = discord.utils.get(ctx.author.guild.roles, name="Lanosch") await ctx.author.add_roles(role) await ctx.send( f"{ctx.author.mention} a jelentkezésed rögzítve.") await ctx.message.delete() else: await ctx.send("Már jelentkeztél korábban.") await ctx.message.delete() file.close() else: await ctx.send( "Levó, ugye ezt te sem gondoltad komolyan? :upside_down:" ) elif arg[0] == "info": await ctx.send( "https://lano.sch.bme.hu/csgo-bajnoksag-szabalyzat/") await ctx.message.delete() elif arg[0] == "help": await ctx.send( "Használható parancsok:\n-``?lanosch info`` részletes kiírás, szabályzat" "\n-``?lanosch`` ha jelentkezni szeretnél\n-``?lanosch team`` az eddig jelentkezettek " "névsora\n-``?lanosch vote [str: szavazat]`` csapatnév javaslata, szavazás csapatnévre " "\n-``?lanosch results`` a csapatnévszavazás jelenlegi állása\n-``?lanosch maps map1 " "map2 map3`` szavazás mapokra\n-``?lanosch mv`` a mapszavazás jelenlegi állása" ) await ctx.message.delete() elif arg[0].startswith("csapat") or arg[0].startswith("team"): file = open( "/srv/shared/Simi/programozas/discordbot/0lanosch.txt", 'r') player_count = 0 lineup = "" for line in file: line = line.split('\t')[1] lineup += line player_count += 1 await ctx.message.delete() embed = discord.Embed(title="Eddig jelentkeztek:", description=f"\n{lineup}", colour=discord.Colour.green()) embed.set_thumbnail(url=ctx.message.guild.icon_url) embed.set_author(name="Lanosch CS:GO 2019", icon_url=ctx.author.avatar_url) if player_count >= 7: embed.add_field( name="Sokan vagyunk", value=f"Mivel eddig {player_count} fő " "jelentkezett, így már cseréink is vannak. " "Ettől függetlenül nyugodtan jelentkezz te is, " "a lineupot meccsenként lehet változtatni. A végleges " "felállást majd ezen a Discordon megtaláljátok.", inline=False) await self.bot.get_channel(ctx.channel.id).send(embed=embed) file.close() elif arg[0] == "vote" or arg[0] == "nev": file = open( "/srv/shared/Simi/programozas/discordbot/0lanoschnev.txt", 'r') szavazat = str.join(" ", arg[1:]) volt = False try: # a sorok száma meret = 0 n = 0 # végigmegyünk a fájl összes során sor = file.readline()[:-1] while sor and sor != '\n': meret += 1 sor = file.readline()[:-1] file.close() # meglehetősen nem hatékony, de while-ban nem tudok értéket adni :( fp = open( "/srv/shared/Simi/programozas/discordbot/0lanoschnev.txt", 'r') intarray = [] strarray = [] if meret > 0: for x in range(meret): line = fp.readline()[:-1].split('\t') intarray.append(int(line[0])) strarray.append(str.join(" ", line[1:])) # végigmegyünk a tömb összes elemén for y in range(len(intarray)): if szavazat == strarray[y]: volt = True n = y break if volt: intarray[n] += 1 else: intarray.append(1) strarray.append(szavazat) else: intarray.append(1) strarray.append(szavazat) fp.close() fp = open( "/srv/shared/Simi/programozas/discordbot/0lanoschnev.txt", 'w') kivan = [] count = 0 for count in range(len(intarray)): kivan.append( str(f"{intarray[count]}\t{strarray[count]}\n")) fp.writelines(kivan) await ctx.message.add_reaction(u"\U0001F44C") fp.close() except Exception as e: ctx.send(f"Error: {e}") elif arg[0] == "votes" or arg[0] == "állás" or arg[ 0] == "allas" or arg[0] == "results": try: file = open( "/srv/shared/Simi/programozas/discordbot/0lanoschnev.txt", 'r') volt = False # a sorok száma meret = 0 n = 0 # végigmegyünk a fájl összes során sor = file.readline()[:-1] while sor and sor != '\n': meret += 1 sor = file.readline()[:-1] file.close() # meglehetősen nem hatékony, de while-ban nem tudok értéket adni :( fp = open( "/srv/shared/Simi/programozas/discordbot/0lanoschnev.txt", 'r') intarray = [] strarray = [] if meret > 0: for x in range(meret): line = fp.readline()[:-1].split('\t') # ezzel itt gondok lehetnek # már nem intarray.append(int(line[0])) strarray.append(str.join(" ", line[1:])) else: pass fp.close() # DIAGRAM chart = chrt.PieChart3D(700, 400) chart.set_title("Csapatnévszavazás állása") # random színek githubról https://gist.github.com/mucar/3898821 chart.set_colours([ 'FF6633', 'FFB399', 'FF33FF', 'FFFF99', '00B3E6', 'E6B333', '3366E6', '999966', '99FF99', 'B34D4D', '80B300', '809900', 'E6B3B3', '6680B3', '66991A', 'FF99E6', 'CCFF1A', 'FF1A66', 'E6331A', '33FFCC', '66994D', 'B366CC', '4D8000', 'B33300', 'CC80CC', '66664D', '991AFF', 'E666FF', '4DB3FF', '1AB399', 'E666B3', '33991A', 'CC9999', 'B3B31A', '00E680', '4D8066', '809980', 'E6FF80', '1AFF33', '999933', 'FF3380', 'CCCC00', '66E64D', '4D80CC', '9900B3', 'E64D66', '4DB380', 'FF4D4D', '99E6E6', '6666FF' ]) chart.set_title_style(colour='000000', font_size=20) chart.add_data(intarray) chart.set_pie_labels(strarray) chart.download( "/srv/shared/Simi/programozas/discordbot/chart.png") # legenerálódjon a fájl await asyncio.sleep(0.125) osszes_szavazat = 0 for szavazat in range(len(intarray)): osszes_szavazat += intarray[szavazat] szavazat_aranyok = "" for i in range(len(intarray)): szavazat_aranyok += f"**{strarray[i]}** {round((intarray[i] / osszes_szavazat * 100), 2)}%\n" kep = discord.File( "/srv/shared/Simi/programozas/discordbot/chart.png") await ctx.send(file=kep) # EMBED # küldje el a képet await asyncio.sleep(0.15) embed = discord.Embed(title="Jelenlegi eredmények:", description=f"\n{szavazat_aranyok}", colour=discord.Colour.green()) embed.set_thumbnail(url=ctx.message.guild.icon_url) embed.set_author(name="Lanosch CS:GO 2019", icon_url=ctx.author.avatar_url) await self.bot.get_channel(ctx.channel.id).send(embed=embed ) except Exception as err: print(f"Error: {err}") ########################################################################################################## ########################################### MAPOS RÉSZ ################################################### ########################################################################################################## elif arg[0] == "map" or arg[0] == "votemap" or arg[0] == "maps": # MAP SZAVAZÁS try: if len(arg) == 4: file = open( "/srv/shared/Simi/programozas/discordbot/0lanoschmaps.txt", 'r') volt = False # ha volt már ilyen szavazat a txtben meret = 0 n = 0 intarray = [] # szavazatok száma strarray = [] # szavazatok stringje # végigmegyünk a fájl összes során, meret a sorok szama sor = file.readline()[:-1] while sor and sor != '\n': meret += 1 sor = file.readline()[:-1] file.close() # meglehetősen nem hatékony, de while-ban nem tudok értéket adni :( file = open( "/srv/shared/Simi/programozas/discordbot/0lanoschmaps.txt", 'r') # fajl_hossza = 0 # beolvassuk a txtben lévő adatokat, majd összevetjük a tömbök tartalmával # ha van már ilyen, akkor int++, különben strarray.append(szavazat) # egy szavazat alkalmával 3x for sor in file: sor = sor.split('\t') intarray.append(int(sor[0])) strarray.append(str(sor[1])[:-1].upper()) length = len(strarray) + 2 # egy szavazat eleme if meret > 0: for i in range(1, 4): volt = False length = len(strarray) for egysor in range(length): if len(strarray) > 0: if arg[i].upper( ) == strarray[egysor].upper(): intarray[egysor] += 1 volt = True break if not volt: strarray.append(arg[i].upper()) intarray.append(1) # index += 1 else: for n in range(1, 4): strarray.append(arg[n].upper()) intarray.append(1) file.close() kiir = open( "/srv/shared/Simi/programozas/discordbot/0lanoschmaps.txt", 'w') kimenet = [] for j in range(len(intarray)): kimenet.append( str(f"{intarray[j]}\t{strarray[j]}\n").upper()) kiir.writelines(kimenet) kiir.close() await ctx.message.add_reaction(u"\U0001F44C") else: await ctx.send("Pontosan 3 mapot adj meg") except Exception as err: await ctx.send(f"Error: {err}") elif arg[0] == "mapresults" or arg[0] == "mapvotes" or arg[ 0] == "mv": # MAPSZAVAZÁS EREDMÉNYEI try: file = open( "/srv/shared/Simi/programozas/discordbot/0lanoschmaps.txt", 'r') volt = False # a sorok száma meret = 0 n = 0 # végigmegyünk a fájl összes során sor = file.readline()[:-1] while sor and sor != '\n': meret += 1 sor = file.readline()[:-1] file.close() # meglehetősen nem hatékony, de while-ban nem tudok értéket adni :( fp = open( "/srv/shared/Simi/programozas/discordbot/0lanoschmaps.txt", 'r') intarray = [] strarray = [] if meret > 0: for x in range(meret): line = fp.readline()[:-1].split('\t') intarray.append(int(line[0])) strarray.append(str(line[1])) else: pass fp.close() # DIAGRAM chart = chrt.PieChart3D(700, 400) chart.set_title("Map szavazatok") chart.set_colours([ 'FF6633', 'FFB399', 'FF33FF', 'FFFF99', '00B3E6', 'E6B333', '3366E6', '999966', '99FF99', 'B34D4D', '80B300', '809900', 'E6B3B3', '6680B3', '66991A', 'FF99E6', 'CCFF1A', 'FF1A66', 'E6331A', '33FFCC', '66994D', 'B366CC', '4D8000', 'B33300', 'CC80CC', '66664D', '991AFF', 'E666FF', '4DB3FF', '1AB399', 'E666B3', '33991A', 'CC9999', 'B3B31A', '00E680', '4D8066', '809980', 'E6FF80', '1AFF33', '999933', 'FF3380', 'CCCC00', '66E64D', '4D80CC', '9900B3', 'E64D66', '4DB380', 'FF4D4D', '99E6E6', '6666FF' ]) chart.set_title_style(colour='000000', font_size=20) chart.add_data(intarray) chart.set_pie_labels(strarray) chart.download( "/srv/shared/Simi/programozas/discordbot/mapchart.png") # legenerálódjon a fájl await asyncio.sleep(0.125) osszes_szavazat = 0 for szavazat in range(len(intarray)): osszes_szavazat += intarray[szavazat] szavazat_aranyok = "" for i in range(len(intarray)): szavazat_aranyok += f"**{strarray[i]}** {round((intarray[i] / osszes_szavazat * 100), 2)}%\n" kep = discord.File( "/srv/shared/Simi/programozas/discordbot/mapchart.png") await ctx.send(file=kep) # EMBED # küldje el a képet await asyncio.sleep(0.15) embed = discord.Embed( title="Jelenlegi mapszavazás-eredmények:", description=f"\n{szavazat_aranyok}", colour=discord.Colour.green()) embed.set_thumbnail(url=ctx.message.guild.icon_url) embed.set_author(name="Lanosch CS:GO 2019", icon_url=ctx.author.avatar_url) await self.bot.get_channel(ctx.channel.id).send(embed=embed ) except Exception as err: print(f"Error: {err}") else: await ctx.send("A ?lanosch parancsnak nincs ilyen paramétere.", delete_after=10) except Exception as e: await ctx.send(f"Error: {e}")