When I host locally it works but when I host on replit it gives me this error. Initially I thought it was due to the server part I created via this video but the error comes directly from the main bot. What could be the problem?
Hosting a free bot has become quite a challenge lately. Why should I spend money on vps if my project is small?
error
Traceback (most recent call last):
File "main.py", line 401, in <module>
client.run(TOKENS)
File "/home/runner/PeppeBOT/venv/lib/python3.10/site-packages/discord/client.py", line 828, in run
asyncio.run(runner())
File "/nix/store/hd4cc9rh83j291r5539hkf6qd8lgiikb-python3-3.10.8/lib/python3.10/asyncio/runners.py", line 44, in run
return loop.run_until_complete(main)
File "/nix/store/hd4cc9rh83j291r5539hkf6qd8lgiikb-python3-3.10.8/lib/python3.10/asyncio/base_events.py", line 649, in run_until_complete
return future.result()
File "/home/runner/PeppeBOT/venv/lib/python3.10/site-packages/discord/client.py", line 817, in runner
await self.start(token, reconnect=reconnect)
File "/home/runner/PeppeBOT/venv/lib/python3.10/site-packages/discord/client.py", line 745, in start
await self.login(token)
File "/home/runner/PeppeBOT/venv/lib/python3.10/site-packages/discord/client.py", line 580, in login
data = await self.http.static_login(token)
File "/home/runner/PeppeBOT/venv/lib/python3.10/site-packages/discord/http.py", line 801, in static_login
data = await self.request(Route('GET', '/users/#me'))
File "/home/runner/PeppeBOT/venv/lib/python3.10/site-packages/discord/http.py", line 680, in request
raise HTTPException(response, data)
discord.errors.HTTPException: 429 Too Many Requests (error code: 0): <!DOCTYPE html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en-US"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en-US"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en-US"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en-US"> <!--<![endif]-->
<head>
<title>Access denied | discord.com used Cloudflare to restrict access</title>
<meta charset="UTF-8" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta name="robots" content="noindex, nofollow" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<link rel="stylesheet" id="cf_styles-css" href="/cdn-cgi/styles/main.css" />
<script>
(function(){if(document.addEventListener&&window.XMLHttpRequest&&JSON&&JSON.stringify){var e=function(a){var c=document.getElementById("error-feedback-survey"),d=document.getElementById("error-feedback-success"),b=new XMLHttpRequest;a={event:"feedback clicked",properties:{errorCode:1015,helpful:a,version:1}};b.open("POST","https://sparrow.cloudflare.com/api/v1/event");b.setRequestHeader("Content-Type","application/json");b.setRequestHeader("Sparrow-Source-Key","c771f0e4b54944bebf4261d44bd79a1e");
b.send(JSON.stringify(a));c.classList.add("feedback-hidden");d.classList.remove("feedback-hidden")};document.addEventListener("DOMContentLoaded",function(){var a=document.getElementById("error-feedback"),c=document.getElementById("feedback-button-yes"),d=document.getElementById("feedback-button-no");"classList"in a&&(a.classList.remove("feedback-hidden"),c.addEventListener("click",function(){e(!0)}),d.addEventListener("click",function(){e(!1)}))})}})();
</script>
<script defer src="https://performance.radar.cloudflare.com/beacon.js"></script>
</head>
<body>
<div id="cf-wrapper">
<div class="cf-alert cf-alert-error cf-cookie-error hidden" id="cookie-alert" data-translate="enable_cookies">Please enable cookies.</div>
<div id="cf-error-details" class="p-0">
<header class="mx-auto pt-10 lg:pt-6 lg:px-8 w-240 lg:w-full mb-15 antialiased">
<h1 class="inline-block md:block mr-2 md:mb-2 font-light text-60 md:text-3xl text-black-dark leading-tight">
<span data-translate="error">Error</span>
<span>1015</span>
</h1>
<span class="inline-block md:block heading-ray-id font-mono text-15 lg:text-sm lg:leading-relaxed">Ray ID: 795444d5a895b0c3 •</span>
<span class="inline-block md:block heading-ray-id font-mono text-15 lg:text-sm lg:leading-relaxed">2023-02-06 13:35:25 UTC</span>
<h2 class="text-gray-600 leading-1.3 text-3xl lg:text-2xl font-light">You are being rate limited</h2>
</header>
<section class="w-240 lg:w-full mx-auto mb-8 lg:px-8">
<div id="what-happened-section" class="w-1/2 md:w-full">
<h2 class="text-3xl leading-tight font-normal mb-4 text-black-dark antialiased" data-translate="what_happened">What happened?</h2>
<p>The owner of this website (discord.com) has banned you temporarily from accessing this website.</p>
</div>
</section>
<div class="feedback-hidden py-8 text-center" id="error-feedback">
<div id="error-feedback-survey" class="footer-line-wrapper">
Was this page helpful?
<button class="border border-solid bg-white cf-button cursor-pointer ml-4 px-4 py-2 rounded" id="feedback-button-yes" type="button">Yes</button>
<button class="border border-solid bg-white cf-button cursor-pointer ml-4 px-4 py-2 rounded" id="feedback-button-no" type="button">No</button>
</div>
<div class="feedback-success feedback-hidden" id="error-feedback-success">
Thank you for your feedback!
</div>
</div>
<div class="cf-error-footer cf-wrapper w-240 lg:w-full py-10 sm:py-4 sm:px-8 mx-auto text-center sm:text-left border-solid border-0 border-t border-gray-300">
<p class="text-13">
<span class="cf-footer-item sm:block sm:mb-1">Cloudflare Ray ID: <strong class="font-semibold">795444d5a895b0c3</strong></span>
<span class="cf-footer-separator sm:hidden">•</span>
<span id="cf-footer-item-ip" class="cf-footer-item hidden sm:block sm:mb-1">
Your IP:
<button type="button" id="cf-footer-ip-reveal" class="cf-footer-ip-reveal-btn">Click to reveal</button>
<span class="hidden" id="cf-footer-ip">34.74.131.130</span>
<span class="cf-footer-separator sm:hidden">•</span>
</span>
<span class="cf-footer-item sm:block sm:mb-1"><span>Performance & security by</span> <a rel="noopener noreferrer" href="https://www.cloudflare.com/5xx-error-landing" id="brand_link" target="_blank">Cloudflare</a></span>
</p>
<script>(function(){function d(){var b=a.getElementById("cf-footer-item-ip"),c=a.getElementById("cf-footer-ip-reveal");b&&"classList"in b&&(b.classList.remove("hidden"),c.addEventListener("click",function(){c.classList.add("hidden");a.getElementById("cf-footer-ip").classList.remove("hidden")}))}var a=document;document.addEventListener&&a.addEventListener("DOMContentLoaded",d)})();</script>
</div><!-- /.error-footer -->
</div><!-- /#cf-error-details -->
</div><!-- /#cf-wrapper -->
<script>
window._cf_translation = {};
</script>
<script>(function(){var js = "window['__CF$cv$params']={r:'795444d5a895b0c3',m:'Dd87hwfU_SGSbuhSCmEIgD4OJgNU9bZXc65YvwTsSWk-1675690525-0-Af7JL6WCgpne12E1VutyYAlLnWrvoh/+MVaM+Dch+KEt5KTJYCZEFTRYzIAIqarUap1plo8VlvVhzUe1OB/Hw0FA7SealXU/Uq/+mAJjPxLFRi9lCCCmdMNpckywRQaZz7LVgUU9VefBQqqQ2Il04v0=',s:[0x33c1ad0932,0xfae449c46d],u:'/cdn-cgi/challenge-platform/h/b'};var _cpo=document.createElement('script');_cpo.nonce='',_cpo.src='/cdn-cgi/challenge-platform/h/b/scripts/cb/invisible.js?cb=795444d5a895b0c3',document.getElementsByTagName('head')[0].appendChild(_cpo);";var _0xh = document.createElement('iframe');_0xh.height = 1;_0xh.width = 1;_0xh.style.position = 'absolute';_0xh.style.top = 0;_0xh.style.left = 0;_0xh.style.border = 'none';_0xh.style.visibility = 'hidden';document.body.appendChild(_0xh);function handler() {var _0xi = _0xh.contentDocument || _0xh.contentWindow.document;if (_0xi) {var _0xj = _0xi.createElement('script');_0xj.nonce = '';_0xj.innerHTML = js;_0xi.getElementsByTagName('head')[0].appendChild(_0xj);}}if (document.readyState !== 'loading') {handler();} else if (window.addEventListener) {document.addEventListener('DOMContentLoaded', handler);} else {var prev = document.onreadystatechange || function () {};document.onreadystatechange = function (e) {prev(e);if (document.readyState !== 'loading') {document.onreadystatechange = prev;handler();}};}})();</script></body>
</html>
discord bot code
import discord
from discord import client
from discord import app_commands
from webserver import keep_alive
import datetime
import asyncio
import os
print("PeppeBOT si sta avviando...")
class VerifySelectMenuTipologia(discord.ui.Select):
def __init__(self):
options=[
discord.SelectOption(label="Giocatore", description="Se vuoi partecipare ai nostri tornei!"),
discord.SelectOption(label="Spettatore", description="Se vuoi solo assistere ai nostri tornei!")
]
super().__init__(placeholder="Seleziona la tua tipologia:",max_values=1,min_values=1,options=options)
async def callback(self, interaction: discord.Interaction):
if self.values[0] == "Giocatore":
self.spettatore = 918003194519511060
spettatore = interaction.guild.get_role(self.spettatore)
await interaction.user.add_roles(spettatore)
self.svincolato = 917269610556968970
svincolato = interaction.guild.get_role(self.svincolato)
await interaction.user.add_roles(svincolato)
elif self.values[0] == "Spettatore":
self.spettatore = 918003193982644224
spettatore = interaction.guild.get_role(self.spettatore)
await interaction.user.add_roles(spettatore)
self.membro = 918025325538078750
membro = interaction.guild.get_role(self.membro)
await interaction.user.add_roles(membro)
self.attività = 917117040035237939
attività = interaction.guild.get_role(self.attività)
await interaction.user.add_roles(attività)
self.boh = 1058541599455465483
boh = interaction.guild.get_role(self.boh)
await interaction.user.remove_roles(boh)
await interaction.delete_original_response()
class VerifySelectMenuTipologiaView(discord.ui.View):
def __init__(self, *, timeout = 180):
super().__init__(timeout=timeout)
self.add_item(VerifySelectMenuTipologia())
class VerifySelectMenuFasciaEta(discord.ui.Select):
def __init__(self):
options=[
discord.SelectOption(label="18+", description="Se sei maggiorenne!"),
discord.SelectOption(label="14-17", description="Se sei tra i 14 e i 17 anni!"),
discord.SelectOption(label="13-",description="Se hai meno di 14 anni!")
]
super().__init__(placeholder="Seleziona la tua fascia d'età",max_values=1,min_values=1,options=options)
async def callback(self, interaction: discord.Interaction):
if self.values[0] == "18+":
self.maggiorenne = 1071955516252758167
maggiorenne = interaction.guild.get_role(self.maggiorenne)
await interaction.user.add_roles(maggiorenne)
await interaction.response.edit_message(content="Manca solo l'ultima selezione! Sei un giocatore o uno spettatore?", view=VerifySelectMenuTipologiaView())
elif self.values[0] == "14-17":
self.mezzo = 1071955345532014652
mezzo = interaction.guild.get_role(self.mezzo)
await interaction.user.add_roles(mezzo)
await interaction.response.edit_message(content="Manca solo l'ultima selezione! Sei un giocatore o uno spettatore?", view=VerifySelectMenuTipologiaView())
elif self.values[0] == "13-":
self.minorenne = 1071955284534247534
minorenne = interaction.guild.get_role(self.minorenne)
await interaction.user.add_roles(minorenne)
await interaction.response.edit_message(content="Manca solo l'ultima selezione! Sei un giocatore o uno spettatore?", view=VerifySelectMenuTipologiaView())
class VerifySelectMenuFasciaEtaView(discord.ui.View):
def __init__(self, *, timeout = 180):
super().__init__(timeout=timeout)
self.add_item(VerifySelectMenuFasciaEta())
class VerifyModal(discord.ui.Modal, title='Verifica'):
nickname = discord.ui.TextInput(
label="Nickname di haxball:",
placeholder="Scrivi qui il tuo nickname di haxball (ricorda non potrai più cambiarlo)",
min_length=1,
max_length=10,
)
async def on_submit(self, interaction: discord.Interaction):
await interaction.user.edit(nick= f'{self.nickname}')
await interaction.response.send_message(content="Ottimo! Ora seleziona la tua fascia d'età", view=VerifySelectMenuFasciaEtaView(), ephemeral=True)
class VerifyButton(discord.ui.View):
def __init__(self) -> None:
super().__init__(timeout=None)
#discord.ui.button(label="Verificati", style=discord.ButtonStyle.green, custom_id="verify_button")
async def verify(self, interaction: discord.Interaction, button: discord.ui.Button):
if type(client.role) is not discord.Role: client.role = interaction.guild.get_role(918025325538078750)
if client.role not in interaction.user.roles:
modal = VerifyModal()
await interaction.response.send_modal(modal)
else:
await interaction.response.send_message("Sei già verificato!", ephemeral=True, delete_after=10)
class PersistentViewBot(discord.Client):
def __init__(self):
super().__init__(intents = discord.Intents.all())
self.synced = False
self.added = False
self.role = 918025325538078750
async def on_ready(self):
await self.wait_until_ready()
if not self.synced:
await tree.sync(guild = discord.Object(id=917112143420215338))
self.synced = True
if not self.added:
self.add_view(VerifyButton())
self.added = True
print(self.user, " si è avviato!")
print("ID :", self.user.id)
global logs_moderazione
global logs_generali
logs_moderazione = self.get_channel(917274076962258975)
logs_generali = self.get_channel(917274597466972230)
embed = discord.Embed(
color=0x03c03c
)
embed.set_author(
name=f'Avvio/Riavvio del Bot!',
)
await tree.sync(guild=discord.Object(id=1006702784797749288))
await logs_moderazione.send(embed=embed)
await tree.sync(guild=discord.Object(id=guild_id))
client = PersistentViewBot()
tree = app_commands.CommandTree(client)
guild_id = 917112143420215338
#client.event
async def on_member_join(member):
guild = member.guild
firstrole = guild.get_role(1058541599455465483)
await member.add_roles(firstrole)
tab1 = guild.get_role(918002005040046100)
await member.add_roles(tab1)
tab2 = guild.get_role(918003746850623529)
await member.add_roles(tab2)
tab3 = guild.get_role(918003750944272425)
await member.add_roles(tab3)
tab4 = guild.get_role(917119249145798716)
await member.add_roles(tab4)
mention = member.mention
guild_id = member.guild
member_count = guild_id.member_count
embed = discord.Embed(
description=str(f"{mention} è entrato su **{guild}!**\nIn tutto ora ci sono **{member_count}** membri."),
color=0x222222
)
await logs_generali.send(embed=embed)
#client.event
async def on_member_remove(member):
name = member.mention
guild = member.guild
member_count = guild.member_count
embed = discord.Embed(
description=str(str(f"**{name}** è uscito da **{guild}!**\nIn tutto ora ci sono **{member_count}** membri.")),
color=0x222222
)
await logs_generali.send(embed=embed)
#Comandi di Moderazione
#Clear [COMPLETO]
clear_cooldown = app_commands.Cooldown(1,600)
def clear_cooldown_checker(interaction: discord.Interaction):
return clear_cooldown
#app_commands.checks.dynamic_cooldown(clear_cooldown_checker, key=lambda i: (i.user.id))
#tree.command(name = "clear", description = "Cancella gli ultimi messaggi inviati ", guild=discord.Object(id=guild_id))
async def clear(ctx, limit: int):
await ctx.response.defer(ephemeral=False, thinking=False)
embed = discord.Embed(
color=0xa61022
)
if limit == 0:
embed.set_author(
name="Non puoi cancellare 0 messaggi!",
)
await ctx.response.send_message(embed=embed, delete_after=10.0)
app_commands.Cooldown.reset(clear_cooldown)
embed = discord.Embed(
color=0x03c03c
)
if limit == 1:
embed.set_author(
name=f'Ho cancellato ufficialmente un messaggio!',
icon_url=f'{ctx.user.avatar}'
)
else:
embed.set_author(
name=f'Ho cancellato ufficialmente {limit} messaggi!',
icon_url=f'{ctx.user.avatar}'
)
await ctx.channel.purge(limit=limit, before=ctx.created_at)
await ctx.followup.send(embed=embed)
embed = discord.Embed(
color=0xFFD000
)
if limit == 1:
embed.set_author(
name=f'{ctx.user.name} ha cancellato un messaggio',
icon_url=f'{ctx.user.avatar}'
)
else:
embed.set_author(
name=f'{ctx.user.name} ha cancellato {limit} messaggi',
icon_url=f'{ctx.user.avatar}'
)
embed.add_field(
name='Messaggi cancellati da:',
value=f'{ctx.user.name}',
inline=True
)
embed.add_field(
name='Quantità:',
value=f'{limit}',
inline=True
)
embed.add_field(
name='Canale dove è stato eseguito il comando:',
value=f'{ctx.channel.mention}',
inline=True
)
await logs_moderazione.send(embed=embed)
await asyncio.sleep(10)
await ctx.delete_original_response()
#clear.error
async def clear_error(ctx, error):
await ctx.response.defer(ephemeral=False, thinking=False)
if isinstance(error, app_commands.CommandOnCooldown):
cooldown = error.cooldown
cd = round(cooldown.get_retry_after())
time = str(datetime.timedelta(seconds=cd))
embed = discord.Embed(
description=f"**Riprova tra `{time}`**",
color=0xa61022
)
embed.set_author(
name="Sei in cooldown!",
icon_url=ctx.user.avatar
)
await ctx.followup.send(embed=embed)
await asyncio.sleep(10)
await ctx.delete_original_response()
#acclear [COMPLETO]
#tree.command(name = "acclear", description = "Cancella con accuratezza gli ultimi messaggi inviati ", guild=discord.Object(id=guild_id))
async def acclear(ctx, message_id: str):
await ctx.response.defer(ephemeral=False, thinking=False)
embed = discord.Embed(
color=0xa61022
)
def message_limit(m):
messageID = message.id
return m.id != messageID
channel = ctx.channel
try:
message = await channel.fetch_message(message_id)
except:
embed.set_author(
name="Non ho trovato il messaggio!",
icon_url=ctx.user.avatar
)
await ctx.response.send_message(embed=embed, delete_after=10.0)
await asyncio.sleep(10)
return 0
embed = discord.Embed(
color=0x03c03c
)
embed.set_author(
name=f'Ho cancellato fino al messaggio:\n{message.content}',
icon_url=f'{ctx.user.avatar}'
)
await ctx.channel.purge(limit=10000, before=ctx.created_at, check=message_limit, after=message)
if message.content == "":
await ctx.followup.send(embed=embed)
embed = discord.Embed(
color=0xFFD000
)
embed.set_author(
name=f'{ctx.user.name} ha cancellato fino al messaggio:\nNon ha testo',
icon_url=f'{ctx.user.avatar}'
)
embed.add_field(
name='Messaggi cancellati da:',
value=f'{ctx.user.name}',
inline=True
)
embed.add_field(
name='Fino al messaggio:',
value=f'Non ha testo',
inline=True
)
embed.add_field(
name='Canale dove è stato eseguito il comando:',
value=f'{ctx.channel.mention}',
inline=True
)
await logs_moderazione.send(embed=embed)
await asyncio.sleep(10)
await ctx.delete_original_response()
else:
await ctx.followup.send(embed=embed)
embed = discord.Embed(
color=0xFFD000
)
embed.set_author(
name=f'{ctx.user.name} ha cancellato fino al messaggio:\n{message.content}',
icon_url=f'{ctx.user.avatar}'
)
embed.add_field(
name='Messaggi cancellati da:',
value=f'{ctx.user.name}',
inline=True
)
embed.add_field(
name='Fino al messaggio:',
value=f'{message.content}',
inline=True
)
embed.add_field(
name='Canale dove è stato eseguito il comando:',
value=f'{ctx.channel.mention}',
inline=True
)
await logs_moderazione.send(embed=embed)
await asyncio.sleep(10)
await ctx.delete_original_response()
#tree.command(name = 'verifybutton', description='Crea il bottone per verificarsi', guild=discord.Object(id=guild_id))
async def verifybutton(ctx):
embed = discord.Embed(
description=str("Benvenuto nel server, prima di poter accedere a tutti i canali è importante verificarsi rispondendo a delle domande molto semplici ossia."),
color=0x222222
)
embed.set_author(
name='PeppeBOT',
icon_url=f'{client.user.avatar}'
)
embed.set_footer(text=f'Haxball Biglassic')
embed.add_field(
name='Domande:',
value="1.Qual è il tuo nickname di haxball?\n2.Qual è la tua fascia d'età?\n3.Sei uno spettatore o un giocatore?",
inline=False
)
embed.add_field(
name='Come rispondere alle domande:',
value="Nella prima domanda dovrai decidere quale nick di haxball utilizzare per questo server senza poterlo cambiare in futuro (ovviamente con le sue regole).\nNella seconda domanda dovrai specificare la tua fascia d'età tra:\n**1.** 13-\n**2.** 14-17\n**3.** 18+\nNella terza domanda dovrai semplicemente dirci se sei venuto per giocare ai tornei organizzati da noi (e quindi essere un effettivo giocatore) oppure se sei venuto semplicemente per conversare e guardare le partite del torneo da spettatore.",
inline=False
)
await ctx.channel.send(embed = embed, view = VerifyButton())
await ctx.response.send_message(content="** **", delete_after=0.1)
sesso_cooldown = app_commands.Cooldown(1,10)
def sesso_cooldown_checker(interaction: discord.Interaction):
return sesso_cooldown
#app_commands.checks.dynamic_cooldown(sesso_cooldown_checker, key=lambda i: (i.user.id))
#tree.command(name = "sesso", description = "Cancella gli ultimi messaggi inviati ", guild=discord.Object(id=guild_id))
async def sesso(ctx):
print(sesso_cooldown)
await ctx.response.send_message("andrea")
await ctx.edit_original_response(content="andrea2")
app_commands.Cooldown.reset(sesso_cooldown)
#sesso.error
async def sesso_error(ctx, error):
if isinstance(error, app_commands.CommandOnCooldown):
cooldown = error.cooldown
cd = round(cooldown.get_retry_after())
time = str(datetime.timedelta(seconds=cd))
embed = discord.Embed(
description=f"**Riprova tra `{time}`**",
color=0xa61022
)
embed.set_author(
name=f"Sei in cooldown!",
icon_url=ctx.user.avatar
)
await ctx.response.send_message(embed=embed)
for i in range(10):
await asyncio.sleep(1)
cd = round(cooldown.get_retry_after())
time = str(datetime.timedelta(seconds=cd))
embed = discord.Embed(
description=f"**Riprova tra `{time}`**",
color=0xa61022
)
embed.set_author(
name=f"Sei in cooldown!",
icon_url=ctx.user.avatar
)
await ctx.edit_original_response(embed=embed)
keep_alive()
TOKENS = os.environ['SECRET_DISCORD_TOKENS']
client.run(TOKENS)
webserver
from flask import Flask
from threading import Thread
app = Flask('')
#app.route("/")
def home():
return "sono vivo"
def run():
app.run(host= '0.0.0.0', port= 8080)
def keep_alive():
t = Thread(target=run)
t.start()
This error occurs when your bot has sent too many requests in a short amount of time. To resolve this, type kill 1 in the shell (located in the bottom window of the Replit IDE) and hit enter. This will halt your bot's processes and reset its connection. Remember to rerun the bot to reconnect.
Well, my problem is basically what the title says: I have a table that retrieves data from a table in another excel file, and now, doesn't stop loading lines, well after said table ended.
The script that I have (see bellow), has another table innerjoined, but that table, also from PowerQuery, that retrieves a table from yet another excel file, loads just fine. No problems. The main one is the one that does not stop until like 3000000 lines (original table is 3000 lines).
I can't understand the problem, because this has been working just fine.
let
Origem = Excel.Workbook(File.Contents("\\SERVIDOR\Registo de defeitos\REGISTO_DEFEITOS_2016.xlsm"), null, true),
REGISTRY_Table = Origem{[Item="REGISTRY",Kind="Table"]}[Data],
#"Tipo Alterado" = Table.TransformColumnTypes(REGISTRY_Table,{{"FINDER", type text}, {"DATA", type date}, {"ORDEM FABRICO", Int64.Type}, {"REFERÊNCIA", Int64.Type}, {"LOTE", type text}, {"OPERADOR", type text}, {"PRENSA", Int64.Type}, {"TURNO", Int64.Type}, {"PRODUÇÃO TOTAL#(lf)(Nº DE PEÇAS)", Int64.Type}, {"A", Int64.Type}, {"B", Int64.Type}, {"C", Int64.Type}, {"D", Int64.Type}, {"E", Int64.Type}, {"F", Int64.Type}, {"Z", Int64.Type}, {"L", Int64.Type}, {"M", Int64.Type}, {"N", Int64.Type}, {"O", Int64.Type}, {"P", Int64.Type}, {"QUANTIDADE DE PEÇAS OK#(lf)(PRENSA)", Int64.Type}, {"QUANTIDADE DE PEÇAS NOK#(lf)(PRENSA)", Int64.Type}, {"% DEFEITOS#(lf)(PRENSA)", type number}, {"% DETECÇÃO DE DEFEITOS#(lf)(PRENSA)", type number}, {"DATA DE INSPECÇÃO", type date}, {"QUANTIDADE DE PEÇAS VERIFICADA#(lf)(Nº DE PEÇAS)", Int64.Type}, {"TIPO DE INSPECÇÃO", type text}, {"A ", Int64.Type}, {"B ", Int64.Type}, {"C ", Int64.Type}, {"D ", Int64.Type}, {"E ", Int64.Type}, {"F ", Int64.Type}, {"Z ", Int64.Type}, {"L ", Int64.Type}, {"M ", Int64.Type}, {"N ", Int64.Type}, {"O ", Int64.Type}, {"P ", Int64.Type}, {"PEÇAS RETRABALHADAS ""OK""#(lf)(Nº DE PEÇAS)", Int64.Type}, {"LOTE#(lf)FECHADO", type text}, {"QUANTIDADE DE PEÇAS OK#(lf)(INSP. FINAL)", Int64.Type}, {"QUANTIDADE DE PEÇAS NOK#(lf)(INSP. FINAL)", Int64.Type}, {"% DEFEITOS#(lf)(INSP. FINAL)", type number}, {"QUANTIDADE DE PEÇAS OK#(lf)(FINAL)", Int64.Type}, {"QUANTIDADE DE PEÇAS NOK#(lf)(FINAL)", Int64.Type}, {"% DEFEITOS#(lf)(FINAL)", type number}, {"CONTABILIZAÇÃO DE PEÇAS", Int64.Type}, {"TESTER", Int64.Type}, {"MÊS", type text}, {"ANO", Int64.Type}, {"MÊS INSP.", type text}, {"ANO INSP.", Int64.Type}}),
#"Colunas Removidas" = Table.RemoveColumns(#"Tipo Alterado",{"TESTER"}),
#"Consultas Intercaladas" = Table.NestedJoin(#"Colunas Removidas",{"FINDER"},TabelaRegistos,{"FINDER"},"NewColumn",JoinKind.Inner),
#"Expandido NewColumn" = Table.ExpandTableColumn(#"Consultas Intercaladas", "NewColumn", {"Nº DE CAVIDADES", "PRODUÇÃO PREVISTA (nº de cargas/h)", "AJUSTE DE OBJECTIVO PRODUÇÃO PREVISTA#(lf)(nº de cargas/h)", "PRODUÇÃO TOTAL#(lf)(nº de peças)", "A ", "B ", "C ", "D ", "E ", "F ", "G ", "H ", "I ", "Z ", "PRENSA SEM PARAGEM PARA REFEIÇÕES?", "J ", "TEMPO DE PARAGEM NÃO PROGRAMADA (min)", "TEMPO DE PARAGEM PROGRAMADA (min)", "AJUSTE DE TEMPO DE TURNO#(lf)(min)", "LOTE FECHADO", "OBSERVAÇÕES", "PRODUÇÃO EFECTIVA#(lf)(nº de cargas/h)", "PERFORMANCE#(lf)(%)", "DISPONIBILIDADE#(lf)(%)", "QUALIDADE PRENSA#(lf)(%)", "QUALIDADE#(lf)(%)", "OEE OBJECTIVO#(lf)(%)", "WE OBJECTIVO#(lf)(%)", "OEE PRENSA#(lf)(%)", "OEE#(lf)(%)", "Δ OEE#(lf)(Δ%)", "WE PRENSA#(lf)(%)", "WE#(lf)(%)", "Δ WE#(lf)(Δ%)", "TEMPO DE TRABALHO DISPONÍVEL#(lf)(min)", "TEMPO DE TRABALHO COM PARAGENS PROGRAMADAS#(lf)(min)", "TEMPO DE TRABALHO COM PARAGENS NÃO PROGRAMADAS#(lf)(min)", "TEMPO DE LABORAÇÃO EFECTIVO#(lf)(min)", "EFICÁCIA DE UTILIZAÇÃO#(lf)(%)", "FINDER", "COMMENTS", "NOME MÊS", "AProg", "BProg", "CProg", "DProg", "EProg", "FProg", "GProg", "HProg", "IProg", "Zprog", "ANProg", "BNProg", "CNProg", "DNProg", "ENProg", "FNProg", "GNProg", "HNProg", "INProg", "ZNprog"}, {"Nº DE CAVIDADES", "PRODUÇÃO PREVISTA (nº de cargas/h)", "AJUSTE DE OBJECTIVO PRODUÇÃO PREVISTA#(lf)(nº de cargas/h)", "PRODUÇÃO TOTAL#(lf)(nº de peças)", "A ", "B ", "C ", "D ", "E ", "F ", "G ", "H ", "I ", "Z ", "PRENSA SEM PARAGEM PARA REFEIÇÕES?", "J ", "TEMPO DE PARAGEM NÃO PROGRAMADA (min)", "TEMPO DE PARAGEM PROGRAMADA (min)", "AJUSTE DE TEMPO DE TURNO#(lf)(min)", "LOTE FECHADO", "OBSERVAÇÕES", "PRODUÇÃO EFECTIVA#(lf)(nº de cargas/h)", "PERFORMANCE#(lf)(%)", "DISPONIBILIDADE#(lf)(%)", "QUALIDADE PRENSA#(lf)(%)", "QUALIDADE#(lf)(%)", "OEE OBJECTIVO#(lf)(%)", "WE OBJECTIVO#(lf)(%)", "OEE PRENSA#(lf)(%)", "OEE#(lf)(%)", "Δ OEE#(lf)(Δ%)", "WE PRENSA#(lf)(%)", "WE#(lf)(%)", "Δ WE#(lf)(Δ%)", "TEMPO DE TRABALHO DISPONÍVEL#(lf)(min)", "TEMPO DE TRABALHO COM PARAGENS PROGRAMADAS#(lf)(min)", "TEMPO DE TRABALHO COM PARAGENS NÃO PROGRAMADAS#(lf)(min)", "TEMPO DE LABORAÇÃO EFECTIVO#(lf)(min)", "EFICÁCIA DE UTILIZAÇÃO#(lf)(%)", "FINDER.1", "COMMENTS", "NOME MÊS", "AProg", "BProg", "CProg", "DProg", "EProg", "FProg", "GProg", "HProg", "IProg", "Zprog", "ANProg", "BNProg", "CNProg", "DNProg", "ENProg", "FNProg", "GNProg", "HNProg", "INProg", "ZNprog"}),
#"Colunas Removidas1" = Table.RemoveColumns(#"Expandido NewColumn",{"PRODUÇÃO TOTAL#(lf)(nº de peças)"}),
#"Personalizado Adicionado" = Table.AddColumn(#"Colunas Removidas1", "PRODUÇÃO TOTAL OBJECTIVO (Nº DE PEÇAS)", each [Nº DE CAVIDADES]*[#"PRODUÇÃO PREVISTA (nº de cargas/h)"]*[#"TEMPO DE TRABALHO COM PARAGENS NÃO PROGRAMADAS#(lf)(min)"]/60),
#"Tipo Alterado1" = Table.TransformColumnTypes(#"Personalizado Adicionado",{{"PRODUÇÃO TOTAL OBJECTIVO (Nº DE PEÇAS)", Int64.Type}}),
#"Trimestre Inserido" = Table.AddColumn(#"Tipo Alterado1", "TRIMESTRE", each Date.QuarterOfYear([DATA]), type number),
#"Personalizado Adicionado1" = Table.AddColumn(#"Trimestre Inserido", "PRODUÇÃO TOTAL OBJECTIVO (TEMPO EFECTIVO)", each [Nº DE CAVIDADES]*[#"PRODUÇÃO PREVISTA (nº de cargas/h)"]*[#"TEMPO DE LABORAÇÃO EFECTIVO#(lf)(min)"]/60),
#"Tipo Alterado2" = Table.TransformColumnTypes(#"Personalizado Adicionado1",{{"PRODUÇÃO TOTAL OBJECTIVO (TEMPO EFECTIVO)", Int64.Type}}),
#"Colunas com Nome Mudado" = Table.RenameColumns(#"Tipo Alterado2",{{"PRODUÇÃO TOTAL OBJECTIVO (Nº DE PEÇAS)", "PRODUÇÃO TOTAL OBJECTIVO (TEMPO COM PARAGENS NÃO PROGRAMADAS)"}}),
#"Colunas Reordenadas" = Table.ReorderColumns(#"Colunas com Nome Mudado",{"FINDER", "DATA", "ORDEM FABRICO", "REFERÊNCIA", "LOTE", "OPERADOR", "PRENSA", "TURNO", "PRODUÇÃO TOTAL#(lf)(Nº DE PEÇAS)", "A", "B", "C", "D", "E", "F", "Z", "L", "M", "N", "O", "P", "QUANTIDADE DE PEÇAS OK#(lf)(PRENSA)", "QUANTIDADE DE PEÇAS NOK#(lf)(PRENSA)", "% DEFEITOS#(lf)(PRENSA)", "% DETECÇÃO DE DEFEITOS#(lf)(PRENSA)", "DATA DE INSPECÇÃO", "QUANTIDADE DE PEÇAS VERIFICADA#(lf)(Nº DE PEÇAS)", "TIPO DE INSPECÇÃO", "A ", "B ", "C ", "D ", "E ", "F ", "Z ", "L ", "M ", "N ", "O ", "P ", "PEÇAS RETRABALHADAS ""OK""#(lf)(Nº DE PEÇAS)", "LOTE#(lf)FECHADO", "QUANTIDADE DE PEÇAS OK#(lf)(INSP. FINAL)", "QUANTIDADE DE PEÇAS NOK#(lf)(INSP. FINAL)", "% DEFEITOS#(lf)(INSP. FINAL)", "QUANTIDADE DE PEÇAS OK#(lf)(FINAL)", "QUANTIDADE DE PEÇAS NOK#(lf)(FINAL)", "% DEFEITOS#(lf)(FINAL)", "CONTABILIZAÇÃO DE PEÇAS", "MÊS", "ANO", "MÊS INSP.", "ANO INSP.", "Nº DE CAVIDADES", "PRODUÇÃO PREVISTA (nº de cargas/h)", "AJUSTE DE OBJECTIVO PRODUÇÃO PREVISTA#(lf)(nº de cargas/h)", "A ", "B ", "C ", "D ", "E ", "F ", "G ", "H ", "I ", "Z ", "PRENSA SEM PARAGEM PARA REFEIÇÕES?", "J ", "TEMPO DE PARAGEM NÃO PROGRAMADA (min)", "TEMPO DE PARAGEM PROGRAMADA (min)", "AJUSTE DE TEMPO DE TURNO#(lf)(min)", "LOTE FECHADO", "OBSERVAÇÕES", "PRODUÇÃO EFECTIVA#(lf)(nº de cargas/h)", "PERFORMANCE#(lf)(%)", "DISPONIBILIDADE#(lf)(%)", "QUALIDADE PRENSA#(lf)(%)", "QUALIDADE#(lf)(%)", "OEE OBJECTIVO#(lf)(%)", "WE OBJECTIVO#(lf)(%)", "OEE PRENSA#(lf)(%)", "OEE#(lf)(%)", "Δ OEE#(lf)(Δ%)", "WE PRENSA#(lf)(%)", "WE#(lf)(%)", "Δ WE#(lf)(Δ%)", "TEMPO DE TRABALHO DISPONÍVEL#(lf)(min)", "TEMPO DE TRABALHO COM PARAGENS PROGRAMADAS#(lf)(min)", "TEMPO DE TRABALHO COM PARAGENS NÃO PROGRAMADAS#(lf)(min)", "TEMPO DE LABORAÇÃO EFECTIVO#(lf)(min)", "EFICÁCIA DE UTILIZAÇÃO#(lf)(%)", "FINDER.1", "COMMENTS", "NOME MÊS", "TRIMESTRE", "AProg", "BProg", "CProg", "DProg", "EProg", "FProg", "GProg", "HProg", "IProg", "Zprog", "ANProg", "BNProg", "CNProg", "DNProg", "ENProg", "FNProg", "GNProg", "HNProg", "INProg", "ZNprog", "PRODUÇÃO TOTAL OBJECTIVO (TEMPO COM PARAGENS NÃO PROGRAMADAS)", "PRODUÇÃO TOTAL OBJECTIVO (TEMPO EFECTIVO)"}),
#"Colunas Removidas2" = Table.RemoveColumns(#"Colunas Reordenadas",{"FINDER.1", "FINDER"}),
#"Personalizado Adicionado2" = Table.AddColumn(#"Colunas Removidas2", "PERFORMANCE LÍQUIDA (%)", each [#"QUANTIDADE DE PEÇAS OK#(lf)(FINAL)"]/[#"PRODUÇÃO TOTAL OBJECTIVO (TEMPO EFECTIVO)"]),
#"Colunas Removidas3" = Table.RemoveColumns(#"Personalizado Adicionado2",{"NOME MÊS"}),
#"Colunas Reordenadas1" = Table.ReorderColumns(#"Colunas Removidas3",{"DATA", "ORDEM FABRICO", "REFERÊNCIA", "LOTE", "OPERADOR", "PRENSA", "TURNO", "PRODUÇÃO TOTAL#(lf)(Nº DE PEÇAS)", "A", "B", "C", "D", "E", "F", "Z", "L", "M", "N", "O", "P", "QUANTIDADE DE PEÇAS OK#(lf)(PRENSA)", "QUANTIDADE DE PEÇAS NOK#(lf)(PRENSA)", "% DEFEITOS#(lf)(PRENSA)", "% DETECÇÃO DE DEFEITOS#(lf)(PRENSA)", "DATA DE INSPECÇÃO", "QUANTIDADE DE PEÇAS VERIFICADA#(lf)(Nº DE PEÇAS)", "TIPO DE INSPECÇÃO", "A ", "B ", "C ", "D ", "E ", "F ", "Z ", "L ", "M ", "N ", "O ", "P ", "PEÇAS RETRABALHADAS ""OK""#(lf)(Nº DE PEÇAS)", "LOTE#(lf)FECHADO", "QUANTIDADE DE PEÇAS OK#(lf)(INSP. FINAL)", "QUANTIDADE DE PEÇAS NOK#(lf)(INSP. FINAL)", "% DEFEITOS#(lf)(INSP. FINAL)", "QUANTIDADE DE PEÇAS OK#(lf)(FINAL)", "QUANTIDADE DE PEÇAS NOK#(lf)(FINAL)", "% DEFEITOS#(lf)(FINAL)", "CONTABILIZAÇÃO DE PEÇAS", "MÊS", "TRIMESTRE", "ANO", "MÊS INSP.", "ANO INSP.", "Nº DE CAVIDADES", "PRODUÇÃO PREVISTA (nº de cargas/h)", "AJUSTE DE OBJECTIVO PRODUÇÃO PREVISTA#(lf)(nº de cargas/h)", "A ", "B ", "C ", "D ", "E ", "F ", "G ", "H ", "I ", "Z ", "PRENSA SEM PARAGEM PARA REFEIÇÕES?", "J ", "TEMPO DE PARAGEM NÃO PROGRAMADA (min)", "TEMPO DE PARAGEM PROGRAMADA (min)", "AJUSTE DE TEMPO DE TURNO#(lf)(min)", "LOTE FECHADO", "OBSERVAÇÕES", "PRODUÇÃO EFECTIVA#(lf)(nº de cargas/h)", "PERFORMANCE#(lf)(%)", "DISPONIBILIDADE#(lf)(%)", "QUALIDADE PRENSA#(lf)(%)", "QUALIDADE#(lf)(%)", "OEE OBJECTIVO#(lf)(%)", "WE OBJECTIVO#(lf)(%)", "OEE PRENSA#(lf)(%)", "OEE#(lf)(%)", "Δ OEE#(lf)(Δ%)", "WE PRENSA#(lf)(%)", "WE#(lf)(%)", "Δ WE#(lf)(Δ%)", "TEMPO DE TRABALHO DISPONÍVEL#(lf)(min)", "TEMPO DE TRABALHO COM PARAGENS PROGRAMADAS#(lf)(min)", "TEMPO DE TRABALHO COM PARAGENS NÃO PROGRAMADAS#(lf)(min)", "TEMPO DE LABORAÇÃO EFECTIVO#(lf)(min)", "EFICÁCIA DE UTILIZAÇÃO#(lf)(%)", "COMMENTS", "AProg", "BProg", "CProg", "DProg", "EProg", "FProg", "GProg", "HProg", "IProg", "Zprog", "ANProg", "BNProg", "CNProg", "DNProg", "ENProg", "FNProg", "GNProg", "HNProg", "INProg", "ZNprog", "PRODUÇÃO TOTAL OBJECTIVO (TEMPO COM PARAGENS NÃO PROGRAMADAS)", "PRODUÇÃO TOTAL OBJECTIVO (TEMPO EFECTIVO)", "PERFORMANCE LÍQUIDA (%)"}),
#"Personalizado Adicionado3" = Table.AddColumn(#"Colunas Reordenadas1", "100%", each 1),
#"Personalizado Adicionado4" = Table.AddColumn(#"Personalizado Adicionado3", "90%", each 0.9),
#"Personalizado Adicionado5" = Table.AddColumn(#"Personalizado Adicionado4", "85%", each 0.85),
#"Personalizado Adicionado6" = Table.AddColumn(#"Personalizado Adicionado5", "80%", each 0.80),
#"Personalizado Adicionado7" = Table.AddColumn(#"Personalizado Adicionado6", "70%", each 0.70),
#"Personalizado Adicionado8" = Table.AddColumn(#"Personalizado Adicionado7", "60%", each 0.60),
#"Personalizado Adicionado9" = Table.AddColumn(#"Personalizado Adicionado8", "50%", each 0.50)
in
#"Personalizado Adicionado9"
Thanks to all that can help.
Possibly something is wrong with your key values:
1 Excel table can not have 3 million lines as the maximum is just over 1 million, so logically the source of your issue is at the step where the nested table is expanded: #"Expandido NewColumn".
I ran a small test with 2 tables, each with keys 1-10 and an inner join resulting in a table with 10 rows. So far so good.
Next I emptied the contents of the key columns of each table and ran the query again, resulting in 10 x 10 = 100 rows as each key in either table corresponds with 10 keys in the other table.
So my suggestion would be to verify the values in your FINDER columns.
If this is not the cause, then please share: which is the first step that is causing the issue: you can check each step in the Query Editor.